臨界區:一種保證在某一時刻只有一個線程能訪問數據的簡便辦法。它只能夠在同一進程內部使用。 對線程的串行化方法來訪問公共資源或一段代碼,速度快,適合控制數據訪問。安全
主要API函數 產生臨界區: InitializeCriticalSection函數
刪除臨界區: DeleteCriticalSection線程
進入臨界區: EnterCriticalSection對象
退出臨界區: LeaveCriticalSection進程
互斥對象:互斥對象跟臨界區類似,但它不單單可以在同一應用程序不一樣線程中實現資源的安全共享,並且能夠在不一樣應用程序的線程之間實現對資源的安全共享,固然下面二者也有這個特色。 只有擁有互斥對象的線程纔有訪問公共資源的權限。互斥對象只有一個,因此能保證公共資源不會同時被多個線程訪問。事件
主要API函數 建立互斥量: CreateMutex資源
打開一個存在的互斥量: OpenMutex同步
釋放互斥量的使用權:ReleaseMutexit
關閉互斥量:CloseHandleio
信號量:使用信號量(信標)最重要用途是:信號容許多個線程同時使用共享資源,它指出了同時訪問共享資源的線程最大數目。
主要API函數( 函數和使用方法都與互斥對象類似)
建立信號量:CreateSemaphore 傳入的參數能夠指定信號量的初始值。
ReleaseSemaphore
事件:用來通知其餘進程/線程某件操做已經完成。還能夠實現對多個線程的優先級比較的操做。
API函數有建立,打開事件對象等
特殊點的是能夠用函數SetEvent人工設置事件爲有無信號狀態,
所以建立事件對象時能夠有兩種方式,一種爲自動重置,一種爲人工重置。
只有人工重置方式建立的事件對象才能正確使用函數SetEvent。
在MFC中對於各類同步對象都提供了相對應的類CCtiticalSection,CMutex,CSemaphore ,CEvent, 另外爲使用等待功能封裝了兩個類:CSingleLock和CMultiLock。這些類方便了使用這些同步對象