線程同步的方式主要有: 臨界區(Critical Section)、互斥量(Mutex)、信號量(Semaphore)、事件(Event)。
他們的主要區別和特點如下:
1)臨界區:通過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。在任意時刻只允許一個線程對共享資源進行訪問,
如果有多個線程試圖訪問公共資源,那么在有一個線程進入后,其他試圖訪問公共資源的線程將被掛起,並一直等到進入臨界區的線程離開,臨界區在被釋放后,其他線程才可以搶占。
2)互斥量:采用互斥對象機制。 只有擁有互斥對象的線程才有訪問公共資源的權限,因為互斥對象只有一個,所以能保證公共資源不會同時被多個線程訪問。
互斥不僅能實現同一應用程序的公共資源安全共享,還能實現不同應用程序的公共資源安全共享。
3)信號量:它允許多個線程在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數目。
4)事 件: 通過通知操作的方式來保持線程的同步,還可以方便實現對多個線程的優先級比較的操作。
