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
  • 相关阅读:
    采用多种算法,模拟摇奖:从1-36中随机抽出8个不重复的数字
    有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?
    5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现。
    集合相关题目0927
    输入输出作业
    IO流,File类的测试........课堂加总结
    使用泛型............课堂
    Map 映射
    Set
    List相关知识点.......课堂加整理
  • 原文地址:https://www.cnblogs.com/Henrya2/p/1359742.html
Copyright © 2011-2022 走看看