线程同步之事件对象(类比互斥对象进行分析)

来源:互联网 发布:windows 10 网络崩溃 编辑:程序博客网 时间:2024/05/20 20:18

      还是以售票系统为例:

#include <windows.h>#include <iostream.h>DWORD WINAPI Fun1Proc(LPVOID lpParameter);DWORD WINAPI Fun2Proc(LPVOID lpParameter);int tickets = 100;HANDLE g_hEvent; //事件对象int main(){HANDLE hThread1;HANDLE hThread2;// 要实现线程同步,第二个参数必须是FALSEg_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);CloseHandle(hThread1);CloseHandle(hThread2);SetEvent(g_hEvent);  // 将事件对象设置为有信号状态(互斥对象一产生便有信号)Sleep(4000);CloseHandle(g_hEvent);return 0;}DWORD WINAPI Fun1Proc(LPVOID lpParameter){while(1){WaitForSingleObject(g_hEvent, INFINITE);if(tickets > 0){Sleep(1);cout << "thread1 sell ticket : " << tickets-- << endl;SetEvent(g_hEvent); // 将事件对象设置为有信号状态(类似于互斥对象的释放)}else{break;}}return 0;}DWORD WINAPI Fun2Proc(LPVOID lpParameter){while(1){WaitForSingleObject(g_hEvent, INFINITE);if(tickets > 0){Sleep(1);cout << "thread2 sell ticket : "<< tickets-- << endl;SetEvent(g_hEvent); // 将事件对象设置为有信号状态(类似于互斥对象的释放)}else{break;}}return 0;}


 

原创粉丝点击