我的windows多線程系列文章:
windows多線程--原子操作
windows多線程同步--事件
windows多線程同步--互斥量
windows多線程同步--臨界區
windows多線程同步--信號量
windows 多線程: CreateThread、_beginthread、_beginthreadex、AfxBeginThread 的區別
MoreWindows的多線程系列文章秒殺多線程面試題系列
一 同步互斥區別
同步:同步是指線程之間所具有的一種制約關系,一個線程的執行依賴另一個線程的消息,當它沒有得到另一個線程的消息時應等待,直到消息到達時才被喚醒,即他們之間有先后關系。
互斥:對於共享的進程系統資源,在各單個線程訪問時的排它性。當有若干個線程都要使用某一共享資源時,任何時刻最多只允許一個線程去使用,其它要使用該資源的線程必須等待,直到占用資源者釋放該資源 本文地址
線程互斥可以看成是一種特殊的線程同步
參考同步與互斥的區別和聯系博客的解釋
進程(線程)之間的兩種關系:同步與互斥。
所謂互斥,是指散布在不同進程之間的若干程序片斷,當某個進程運行其中一個程序片段時,其它進程就不能運行它們之中的任一程序片段,只能等到該進程運行完這個程序片段后才可以運行。
所謂同步,是指散布在不同進程之間的若干程序片斷,它們的運行必須嚴格按照規定的 某種先后次序來運行,這種先后次序依賴於要完成的特定的任務。
顯然,同步是一種更為復雜的互斥,而互斥是一種特殊的同步。也就是說互斥是兩個線程之間不可以同時運行,他們會相互排斥,必須等待一個線程運行完畢,另一個才能運行,而同步也是不能同時運行,但他是必須要安照某種次序來運行相應的線程(也是一種互斥)!
總結:
互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。
同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。
參考秒殺多線程第九篇 經典線程同步總結 關鍵段 事件 互斥量 信號量的解釋
當線程並發執行時,由於資源共享和線程協作,使用線程之間會存在以下兩種制約關系。
(1).間接相互制約。一個系統中的多個線程必然要共享某種系統資源,如共享CPU,共享I/O設備,所謂間接相互制約即源於這種資源共享,打印機就是最好的例子,線程A在使用打印機時,其它線程都要等待。
(2).直接相互制約。這種制約主要是因為線程之間的合作,如有線程A將計算結果提供給線程B作進一步處理,那么線程B在線程A將數據送達之前都將處於阻塞狀態。
間接相互制約可以稱為互斥,直接相互制約可以稱為同步,對於互斥可以這樣理解,線程A和線程B互斥訪問某個資源則它們之間就會產個順序問題——要么線程A等待線程B操作完畢,要么線程B等待線程操作完畢,這其實就是線程的同步了。因此同步包括互斥,互斥其實是一種特殊的同步。
二 同步互斥的方法
分為兩類:用戶模式和內核模式。顧名思義,內核模式就是指利用系統內核對象的單一性來進行同步,使用時需要切換內核態與用戶態,而用戶模式就是不需要切換到內核態,只在用戶態完成操作。
用戶模式下的方法有:原子操作、臨界區
內核模式下的方法有:互斥量、信號量、事件
三 臨界區、互斥量、信號量、事件 對比
1、關於線程所有權屬性:即某個線程獲得該同步工具后,在他釋放該工具前可以多次進入想訪問的資源,一般來說具有所有權屬性的工具不用於線程同步,只用於互斥,具體可以參考本文最前面的幾篇博客
2、內核模式下的工具可以用於不同進程的線程之間的同步互斥,用戶模式則只能用於相同進程的線程之間
3、只有互斥量在線程異常退出時,會釋放對該工具的所有權,其他線程可以繼續獲取。其他的工具在線程異常退出時,其占有的工具不會釋放,其他線程需要一直等待
【版權聲明】轉載請注明出處:http://www.cnblogs.com/TenosDoIt/p/3602797.html

