在單CPU系統(tǒng)中,處理器是一個共享資源。在多個進(jìn)程之間共享處理器時,處理器的使用由調(diào)度程序控制,不存在競爭問題。但對于系統(tǒng)的其它資源而言,情況并非如此。不同的任務(wù)可能需要同時使用同一硬件外設(shè)或內(nèi)存區(qū)域。如果不控制這些公共資源的訪問,系統(tǒng)中很快就會出現(xiàn)資源爭用問題。
如何在Semaphore(信號量)和Mutex(互斥)之間做選擇,應(yīng)考慮以下的問題:
1、資源類型:
- 多個實例:如果多個任務(wù)可以同時訪問資源,請使用信號量。
- 單個實例:如果一次只有一個任務(wù)需要訪問資源,請使用互斥。
2、訪問模式:
-非排他性訪問:如果多個任務(wù)可以同時訪問資源,請使用信號量。
- 獨(dú)家訪問:如果只有一個任務(wù)需要獨(dú)家訪問資源,請使用互斥。
3、所有權(quán)要求:
- 需要所有權(quán):如果您需要強(qiáng)制執(zhí)行所有權(quán),請使用互斥,確保只有獲得互斥的任務(wù)才能釋放它。
- 無需所有權(quán):如果所有權(quán)不是問題,請使用信號量。
4、性能:
-開銷:由于所有權(quán)跟蹤和優(yōu)先級反轉(zhuǎn)預(yù)防機(jī)制,與信號量相比,Mutex通常具有更高的開銷。
- 速度:對于簡單的同步任務(wù),信號量通常更快。
5、優(yōu)先反轉(zhuǎn):
-優(yōu)先級反轉(zhuǎn):Mutexes具有防止優(yōu)先級反轉(zhuǎn)的機(jī)制(例如優(yōu)先級繼承),這在實時系統(tǒng)中可能很重要。
-無優(yōu)先級反轉(zhuǎn):信號量沒有防止優(yōu)先級反轉(zhuǎn)的內(nèi)置機(jī)制。
6、復(fù)雜性:
- 簡單性:在基本同步任務(wù)中,信號量更易于使用和理解。
- 復(fù)雜性:由于所有權(quán)和優(yōu)先級反轉(zhuǎn)考慮,Mutex可能會更加復(fù)雜。
小結(jié)
-信號量:用于對資源的非排他性訪問,以及當(dāng)一個資源的多個實例可以同時訪問時。
- 互斥:用于獨(dú)家訪問資源,當(dāng)一次只能訪問一個任務(wù)訪問資源時。
審核編輯:劉清
-
處理器
+關(guān)注
關(guān)注
68文章
19100瀏覽量
228814 -
信號量
+關(guān)注
關(guān)注
0文章
53瀏覽量
8306
原文標(biāo)題:如何在Semaphore和Mutex之間做選擇?
文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論