在單CPU系統(tǒng)中,處理器是一個共享資源。在多個進程之間共享處理器時,處理器的使用由調(diào)度程序控制,不存在競爭問題。但對于系統(tǒng)的其它資源而言,情況并非如此。不同的任務(wù)可能需要同時使用同一硬件外設(shè)或內(nèi)存區(qū)域。如果不控制這些公共資源的訪問,系統(tǒng)中很快就會出現(xiàn)資源爭用問題。

如何在Semaphore(信號量)和Mutex(互斥)之間做選擇,應(yīng)考慮以下的問題:
1、資源類型:
- 多個實例:如果多個任務(wù)可以同時訪問資源,請使用信號量。
- 單個實例:如果一次只有一個任務(wù)需要訪問資源,請使用互斥。
2、訪問模式:
-非排他性訪問:如果多個任務(wù)可以同時訪問資源,請使用信號量。
- 獨家訪問:如果只有一個任務(wù)需要獨家訪問資源,請使用互斥。
3、所有權(quán)要求:
- 需要所有權(quán):如果您需要強制執(zhí)行所有權(quán),請使用互斥,確保只有獲得互斥的任務(wù)才能釋放它。
- 無需所有權(quán):如果所有權(quán)不是問題,請使用信號量。
4、性能:
-開銷:由于所有權(quán)跟蹤和優(yōu)先級反轉(zhuǎn)預(yù)防機制,與信號量相比,Mutex通常具有更高的開銷。
- 速度:對于簡單的同步任務(wù),信號量通常更快。
5、優(yōu)先反轉(zhuǎn):
-優(yōu)先級反轉(zhuǎn):Mutexes具有防止優(yōu)先級反轉(zhuǎn)的機制(例如優(yōu)先級繼承),這在實時系統(tǒng)中可能很重要。
-無優(yōu)先級反轉(zhuǎn):信號量沒有防止優(yōu)先級反轉(zhuǎn)的內(nèi)置機制。
6、復(fù)雜性:
- 簡單性:在基本同步任務(wù)中,信號量更易于使用和理解。
- 復(fù)雜性:由于所有權(quán)和優(yōu)先級反轉(zhuǎn)考慮,Mutex可能會更加復(fù)雜。
小結(jié)
-信號量:用于對資源的非排他性訪問,以及當一個資源的多個實例可以同時訪問時。
- 互斥:用于獨家訪問資源,當一次只能訪問一個任務(wù)訪問資源時。
審核編輯:劉清
-
處理器
+關(guān)注
關(guān)注
68文章
20259瀏覽量
252547 -
信號量
+關(guān)注
關(guān)注
0文章
53瀏覽量
8769
原文標題:如何在Semaphore和Mutex之間做選擇?
文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
【安富萊】【RTX操作系統(tǒng)教程】第15章 互斥信號量
轉(zhuǎn):第23章 FreeRTOS互斥信號量
第15章 互斥信號量
芯靈思SinlinxA33開發(fā)板的Linux內(nèi)核信號量學(xué)習
芯靈思SinlinxA64開發(fā)板 Linux內(nèi)核信號量學(xué)習
信號量和互斥信號量該怎么選擇?
例程使用互斥信號量初始化如何設(shè)置?
FreeRTOS 隊列 信號量 互斥量
ThreadX(六)------信號量semaphore
使用Arduino在FreeRTOS中實現(xiàn)信號量和互斥量的方式
如何在Semaphore(信號量)和Mutex(互斥)之間做選擇?
評論