線程同步 內核對象比較

臨界區:一種保證在某一時刻只有一個線程能訪問數據的簡便辦法。它只能夠在同一進程內部使用。   對線程的串行化方法來訪問公共資源或一段代碼,速度快,適合控制數據訪問。安全

主要API函數       產生臨界區: InitializeCriticalSection函數

                              刪除臨界區: DeleteCriticalSection線程

                              進入臨界區: EnterCriticalSection對象

                              退出臨界區: LeaveCriticalSection進程

 

互斥對象:互斥對象跟臨界區類似,但它不單單可以在同一應用程序不一樣線程中實現資源的安全共享,並且能夠在不一樣應用程序的線程之間實現對資源的安全共享,固然下面二者也有這個特色。 只有擁有互斥對象的線程纔有訪問公共資源的權限。互斥對象只有一個,因此能保證公共資源不會同時被多個線程訪問。事件

主要API函數        建立互斥量: CreateMutex資源

                              打開一個存在的互斥量: OpenMutex同步

                              釋放互斥量的使用權:ReleaseMutexit

                              關閉互斥量:CloseHandleio

 

信號量:使用信號量(信標)最重要用途是:信號容許多個線程同時使用共享資源,它指出了同時訪問共享資源的線程最大數目。

主要API函數( 函數和使用方法都與互斥對象類似)  

                            建立信號量:CreateSemaphore  傳入的參數能夠指定信號量的初始值。

                                       ReleaseSemaphore

 

事件:用來通知其餘進程/線程某件操做已經完成。還能夠實現對多個線程的優先級比較的操做。

API函數有建立,打開事件對象等

特殊點的是能夠用函數SetEvent人工設置事件爲有無信號狀態,
所以建立事件對象時能夠有兩種方式,一種爲自動重置,一種爲人工重置。

只有人工重置方式建立的事件對象才能正確使用函數SetEvent。

 

在MFC中對於各類同步對象都提供了相對應的類CCtiticalSection,CMutex,CSemaphore ,CEvent, 另外爲使用等待功能封裝了兩個類:CSingleLock和CMultiLock。這些類方便了使用這些同步對象

相關文章
相關標籤/搜索