自动重置事件+临界区实现线程间同步

来源:互联网 发布:hdmi网络传输器 音频 编辑:程序博客网 时间:2024/06/05 20:30

该示例与上一篇的《手动重置事件+临界区实现线程间同步》的不同点就是事件的类型不同,并且不需要调用ResetEvent函数

#include <iostream>#include <Windows.h>using namespace std;int g_count = 0;HANDLE hEvent = NULL;CRITICAL_SECTION g_cs;DWORD WINAPI ThreadProc(PVOID pParam){int nThreadNum = *(int *)pParam;SetEvent(hEvent);Sleep(50);EnterCriticalSection(&g_cs);++g_count;cout << "线程编号为" << nThreadNum << "  全局资源为" << g_count << endl;LeaveCriticalSection(&g_cs);return 0;}int main(int argc, char *argv[]){hEvent = CreateEvent(0,FALSE,FALSE,0);// 创建自动重置事件InitializeCriticalSection(&g_cs);HANDLE hThreads[10];for (int i = 0 ; i < 10 ; ++i){hThreads[i] = CreateThread(0,0,ThreadProc,&i,0,0);WaitForSingleObject(hEvent,INFINITE);// 提示:这里并没有调用ResetEvent函数来重置事件的未触发状态}WaitForMultipleObjects(10,hThreads,TRUE,INFINITE);for (int i = 0 ; i < 10 ; ++i){CloseHandle(hThreads[i]);}DeleteCriticalSection(&g_cs);CloseHandle(hEvent);return 0;}


0 0
原创粉丝点击