線程同步的三種方式:
互斥對象
事件對象
關鍵代碼段
三者的比較:
n 互斥對象和事件對象屬于核心對象,利用核心對象進行線程同步,速度較慢,但利用互斥對象和事件對象這樣的核心對象,可以在多個程序中的各個線程間進行同步。
n 關鍵代碼段是工作在使用者方式下,同步速度較快,但在使用關鍵代碼段時,很容易進入死鎖狀态,因為在等待進入關鍵代碼段時無法設定逾時值。
互斥對象:
HANDLE hMutex; //全局變量
hMutex=CreateMutex(NULL,TRUE,NULL);
ReleaseMutex(hMutex);
//在其他的線程中
WaitForSingleObject(hMutex,INFINITE);
需要同步的,通路共享資源的程式代碼
ReleaseMutex(hMutex);
CloseHandle(g_hEvent);
事件對象:
HANDLE g_hEvent; //全局變量
g_hEvent=CreateEvent(NULL,FALSE,FALSE,"tickets");
SetEvent(g_hEvent);
WaitForSingleObject(g_hEvent,INFINITE);
需要同步的,通路共享資源的程式代碼
SetEvent(g_hEvent); //置事件為有信号狀态(其他線程可以通路)
//ResetEvent(g_hEvent)
//置事件為無信.//号狀态(其他線程不可通路,隻在該//線程内有效)
CloseHandle(g_hEvent);
關鍵代碼段:
CRITICAL_SECTION g_cs; //全局變量
InitializeCriticalSection(&g_cs); //通常在類的構造函數中
EnterCriticalSection(&g_cs);
需要同步的,通路共享資源的程式代碼
LeaveCriticalSection(&g_cs);
DeleteCriticalSection(&g_cs); //通常在類的析構函數中
專注于企業資訊化,最近對股票資料分析較為感興趣,可免費分享股票個股主力資金實時變化趨勢分析工具,股票交流QQ群:457394862
本文轉自滄海-重慶部落格園部落格,原文連結:http://www.cnblogs.com/omygod/archive/2006/11/08/554519.html,如需轉載請自行聯系原作者