C++使用CriticalSection實(shí)現(xiàn)線程同步實(shí)例
本文實(shí)例講述了C++使用CriticalSection實(shí)現(xiàn)線程同步的方法,在前文C++線程同步實(shí)例分析的基礎(chǔ)上增加了四行代碼,使用了四個(gè)函數(shù):
EnterCriticalSection ::DeleteCriticalSection ::EnterCriticalSection ::LeaveCriticalSection此時(shí),打印出來的數(shù)字就相等了。
具體代碼如下:
#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++程序設(shè)計(jì)有所幫助。
相關(guān)文章
C語言中結(jié)構(gòu)體(struct)的幾種初始化方法
相信大家都知道struct結(jié)構(gòu)體是C語言中非常重要的復(fù)合類型,初始化的方法很多,那么小編下面對這些方法進(jìn)行總結(jié),便于自己和大家以后查閱,有需要的可以參考借鑒。2016-08-08C語言程序設(shè)計(jì)之指針的應(yīng)用詳解
為了讓大家能夠更準(zhǔn)確的了解C語言中指針的使用,本文為大家準(zhǔn)備了四個(gè)指針相關(guān)的例題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2022-11-11C++ 模擬實(shí)現(xiàn)list(迭代器)實(shí)現(xiàn)代碼
這篇文章主要介紹了C++ 模擬實(shí)現(xiàn)list(迭代器)實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05C語言結(jié)構(gòu)體字節(jié)對齊的實(shí)現(xiàn)深入分析
這篇文章主要介紹了C語言結(jié)構(gòu)體字節(jié)對齊的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-10-10