1 //生产者消费者问题 2 //使用事件和互斥量实现 3 //缓冲区只能放一个产品 4 5 //有人可能疑问,为什么不能用两个互斥量来实现同步, 6 //像使用两个事件一样。因为互斥量具有线程所有的概念, 7 //等待函数执行后,互斥量会保存当前线程id,表示这个互斥量属于这个线程。 8 //当你在另一个线程Release这个互斥量时,因为互斥量保存的线程ID与当前 9 //线程ID不一致,操作将返回FALSE。10 #include11 #include 12 13 //互斥量14 HANDLE g_hMutex;15 //事件16 HANDLE g_hEventBufferEmpty, g_hEventBufferFull; 17 //缓冲区,只能放一个产品18 int g_Buffer; 19 20 DWORD WINAPI ProducterThreadFunc(PVOID pM)21 {22 int i;23 for(i = 1; i <= 10; i++)24 {25 WaitForSingleObject(g_hEventBufferEmpty, INFINITE);26 //等待互斥量被释放(触发)27 WaitForSingleObject(g_hMutex, INFINITE);28 29 g_Buffer = i;30 std::cout<<"生产者放入产品:"< <