zoukankan      html  css  js  c++  java
  • 火车站售票模拟程序 (Win32 多线程)

    修改了孙鑫的那本书的代码,原来的代码有BUG。

    最明显的一个是,互斥对象在需要互斥的线程之前就应该创建,否则会出问题。

    // File: MultiThread.cpp
    // Description: Tickets selling simulation

    #include 
    <windows.h>
    #include 
    <iostream>
    #include 
    <cstdlib>
    #include 
    <ctime>
    using namespace std;

    DWORD WINAPI Fun1Proc( LPVOID lpParameter  
    /* Thread data */ );
    DWORD WINAPI Fun2Proc( LPVOID lpParameter 
    /* Thread data */ );

    int index = 0;
    int tickets = 100;
    const int nMaxWaitTime = 400;
    const int nProcessTime = 0;
    HANDLE hMutex;

    int main()
    {
        HANDLE hThread1;
        HANDLE hThread2;

        hMutex 
    = CreateMutex( NULL, FALSE, NULL );

        srand( time(NULL) );

        
    // Create threads
        hThread1 = CreateThread( NULL, 0, Fun1Proc, NULL, 0, NULL );
        hThread2 
    = CreateThread( NULL, 0, Fun2Proc, NULL, 0, NULL );

        WaitForSingleObject( hThread1, INFINITE );
        WaitForSingleObject( hThread2, INFINITE );
        CloseHandle( hThread1 );
        CloseHandle( hThread2 );

        cout 
    << "Tickets out." << endl;

        
    return 0;
    }

    //Entry of Fun1Proc
    DWORD WINAPI Fun1Proc( LPVOID lpParameter /* Thread data */)
    {
        
    while (TRUE)
        {
            Sleep( rand() 
    % nMaxWaitTime );
            WaitForSingleObject( hMutex, INFINITE );
            Sleep( nProcessTime );
            
    if ( tickets > 0 )
                cout 
    << "Thread1 sell ticket : " << tickets-- << endl;
            
    else 
                
    break;
            ReleaseMutex( hMutex );
        }
        
    return 0;
    }

    // Entry of Fun2Proc
    DWORD WINAPI Fun2Proc( LPVOID lpParameter /* Thread data */ )
    {

        
    while ( TRUE )
        {
            Sleep( rand() 
    % nMaxWaitTime );
            WaitForSingleObject( hMutex, INFINITE );
            Sleep( nProcessTime );
            
    if ( tickets > 0 )
                cout 
    << "Thread2 sell ticket : " << tickets-- << endl;
            
    else
                
    break;
            ReleaseMutex( hMutex );
        }
        
    return 0;
    }

    //End of file MultiThread.cpp
  • 相关阅读:
    mysql case when 条件过滤
    window.parent != window 解决界面嵌套问题
    session cookie原理及应用
    面向程序员的数据库访问性能优化法则
    js奇葩错误 字符串传递问题
    js奇葩错误
    javascript:history.go(-1);
    百度地图sdk定位和遇到的坑
    WebForm 登陆test
    输出字符串格式化/ Linq对数组操作 /一个按钮样式
  • 原文地址:https://www.cnblogs.com/Henrya2/p/1359742.html
Copyright © 2011-2022 走看看