windows多線程同步互斥--總結


我的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等待線程操作完畢,這其實就是線程的同步了。因此同步包括互斥,互斥其實是一種特殊的同步

 

二 同步互斥的方法

 

分為兩類:用戶模式和內核模式。顧名思義,內核模式就是指利用系統內核對象的單一性來進行同步,使用時需要切換內核態與用戶態,而用戶模式就是不需要切換到內核態,只在用戶態完成操作。

用戶模式下的方法有:原子操作、臨界區

內核模式下的方法有:互斥量、信號量、事件

 

三 臨界區、互斥量、信號量、事件 對比

 

image

 

1、關於線程所有權屬性:即某個線程獲得該同步工具后,在他釋放該工具前可以多次進入想訪問的資源,一般來說具有所有權屬性的工具不用於線程同步,只用於互斥,具體可以參考本文最前面的幾篇博客

2、內核模式下的工具可以用於不同進程的線程之間的同步互斥,用戶模式則只能用於相同進程的線程之間

3、只有互斥量在線程異常退出時,會釋放對該工具的所有權,其他線程可以繼續獲取。其他的工具在線程異常退出時,其占有的工具不會釋放,其他線程需要一直等待

 

 

【版權聲明】轉載請注明出處:http://www.cnblogs.com/TenosDoIt/p/3602797.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM