我的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