本文實例講述了C++使用CriticalSection實現線程同步的方法,在前文C++線程同步實例分析的基礎上增加了四行代碼,使用了四個函數:
EnterCriticalSection ::DeleteCriticalSection ::EnterCriticalSection ::LeaveCriticalSection此時,打印出來的數字就相等了。
具體代碼如下:
#include "stdafx.h" #include <Windows.h> DWORD g_cnt1; DWORD g_cnt2; BOOL g_bContinue = TRUE; CRITICAL_SECTION cs; DWORD WINAPI ThreadProc(__in LPVOID lpParameter) { ::EnterCriticalSection(&cs); while(g_bContinue) { g_cnt1++; g_cnt2++; } ::LeaveCriticalSection(&cs); return 0; } int _tmain(int argc, _TCHAR* argv[]) { HANDLE hThread[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]); return 0; }
希望本文所述對大家的C++程序設計有所幫助。
新聞熱點
疑難解答
圖片精選