用mutex同步多线程

 
  1. #include <windows.h>
  2. #include <iostream>
  3. DWORD WINAPI ThreadProc1(LPVOID lpParameter );
  4. DWORD WINAPI ThreadProc2(LPVOID lpParameter );
  5. int index = 0;
  6. int tickets = 100;  
  7. HANDLE hMutex;
  8. int main()
  9. {
  10.     HANDLE hThread1 ;
  11.     HANDLE hThread2 ;
  12.     /*hMutex = CreateMutex(NULL,true,NULL);
  13.     WaitForSingleObject(hMutex,0);
  14.     ReleaseMutex(hMutex);
  15.     ReleaseMutex(hMutex);
  16.     */
  17.     hMutex = CreateMutex(NULL,true,"tickets");
  18. //使程序只有一个运行实例
  19.     if(hMutex)
  20.     {
  21.         if(ERROR_ALREADY_EXISTS == GetLastError())
  22.         {
  23.             std::cout<<"Only one instance can be ran!"<<std::endl;
  24.             return 0;
  25.         }
  26.     }
  27.     hThread1 = CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
  28.     hThread2 = CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
  29.     
  30.     CloseHandle(hThread1);
  31.     CloseHandle(hThread2);
  32.     ReleaseMutex(hMutex);
  33.     /*while(index++<1000)
  34.     std::cout<<"The main thread is running"<<std::endl;*/
  35.     //Sleep(10);
  36.     Sleep(4000);
  37.     return 0;
  38. }
  39. DWORD WINAPI ThreadProc1(LPVOID lpParameter )
  40. {
  41.     while(true)
  42.     {   
  43.         WaitForSingleObject(hMutex,INFINITE);
  44.         
  45.         if(tickets)
  46.         {
  47.             
  48.             std::cout<<"Thread1 selled tickets "<<tickets--<<std::endl;
  49.         }
  50.         else 
  51.             break;
  52.         ReleaseMutex(hMutex);
  53.     }
  54.     return 0;
  55. }
  56. DWORD WINAPI ThreadProc2(
  57.                          LPVOID lpParameter   // thread data
  58.                          )
  59. {
  60.     while(true)
  61.     {
  62.         WaitForSingleObject(hMutex,INFINITE);
  63.         
  64.         if(tickets)
  65.         {
  66.             
  67.             std::cout<<"Thread2 selled tickets "<<tickets--<<std::endl;
  68.         }
  69.         else
  70.             break;
  71.         ReleaseMutex(hMutex);
  72.     }
  73.     return 0;
  74.     
  75. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值