C++使用CriticalSection实现线程同步实例
本文实例讲述了C++使用CriticalSection实现线程同步的方法,在前文C++线程同步实例分析的基础上增加了四行代码,使用了四个函数:
EnterCriticalSection::DeleteCriticalSection::EnterCriticalSection::LeaveCriticalSection此时,打印出来的数字就相等了。
具体代码如下:
#include"stdafx.h" #include<Windows.h> DWORDg_cnt1; DWORDg_cnt2; BOOLg_bContinue=TRUE; CRITICAL_SECTIONcs; DWORDWINAPIThreadProc(__inLPVOIDlpParameter) { ::EnterCriticalSection(&cs); while(g_bContinue) { g_cnt1++; g_cnt2++; } ::LeaveCriticalSection(&cs); return0; } int_tmain(intargc,_TCHAR*argv[]) { HANDLEhThread[2]; g_cnt1=g_cnt2=0; ::InitializeCriticalSection(&cs); hThread[0]=::CreateThread(NULL,0,ThreadProc,NULL,0,NULL); hThread[1]=::CreateThread(NULL,0,ThreadProc,NULL,0,NULL); Sleep(1000); g_bContinue=FALSE; ::WaitForMultipleObjects(2,hThread,TRUE,INFINITE); printf("g_cnt1=%d\n",g_cnt1); printf("g_cnt2=%d\n",g_cnt2); ::DeleteCriticalSection(&cs); ::CloseHandle(hThread[0]); ::CloseHandle(hThread[1]); return0; }
希望本文所述对大家的C++程序设计有所帮助。