【記錄複查】mutex | critical section

==========================blogI============================ 安全

一、臨界區只能用於對象在同一進程裏線程間的互斥訪問;互斥體能夠用於對象進程間或線程間的互斥訪問。
二、臨界區是非內核對象,只在用戶態進行鎖操做,速度快;互斥體是內核對象,在覈心態進行鎖操做,速度慢。
三、臨界區和互斥體在Windows平臺都下可用;Linux下只有互斥體可用。 多線程

一、臨界區:經過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。
二、互斥量:爲協調共同對一個共享資源的單獨訪問而設計的。
臨界區(Critical Section)


  保證在某一時刻只有一個線程能訪問數據的簡便辦法。在任意時刻只容許一個線程對共享資源進行訪問。若是有多個線程試圖同時訪問臨界區,那麼在有一個線程進入後其餘全部試圖訪問此臨界區的線程將被掛起,並一直持續到進入臨界區的線程離開。臨界區在被釋放後,其餘線程能夠繼續搶佔,並以此達到用原子方式操做共享資源的目的。
  臨界區包含兩個操做原語:
  EnterCriticalSection() 進入臨界區
  LeaveCriticalSection() 離開臨界區
  EnterCriticalSection()語句執行後代碼將進入臨界區之後不管發生什麼,必須確保與之匹配的LeaveCriticalSection()都可以被執行到。不然臨界區保護的共享資源將永遠不會被釋放。雖然臨界區同步速度很快,但卻只能用來同步本進程內的線程,而不可用來同步多個進程中的線程。
互斥量(Mutex)

  互斥量跟臨界區很類似,只有擁有互斥對象的線程才具備訪問資源的權限,因爲互斥對象只有一個,所以就決定了任何狀況下此共享資源都不會同時被多個線程所訪問。當前佔據資源的線程在任務處理完後應將擁有的互斥對象交出,以便其餘線程在得到後得以訪問資源。互斥量比臨界區複雜。由於使用互斥不單單可以在同一應用程序不一樣線程中實現資源的安全共享,並且能夠在不一樣應用程序的線程之間實現對資源的安全共享。

=======================blogII=========================1.鎖住一個未被擁有的mutex,比鎖住一個未被擁有的critical section須要花費幾乎100被的時間。由於critical section不須要進入操做系統核心。2.mutexs能夠跨進程使用,critical section則只可以在同一進程中使用。
3.等待一個mutex時,你能夠指定「結束等待」的時間長度。
4.CRITICAL_SECTION不是核心對象。
如下是兩種對象的相關函數比較: 
CRITICAL_SECTION                                          Mutex核心對象
 InitializeCriticalSection()                                    CreateMutex()
                                                                                OpenMutex()
 EnterCriticalSection()                                         WaitForSingleObject()
                                                                                WaitForMultipleObject()
                                                                                MsgWaitForMultipleObject()
 LeaveCriticalSection()                                       ReleaseMutex()
 DeleteCriticalSection()                                      CloseHandle() 函數

相關文章
相關標籤/搜索