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

FreeRTOS 隊(duì)列 信號(hào)量 互斥量

ThreadX(六)------信號(hào)量semaphore

使用Arduino在FreeRTOS中實(shí)現(xiàn)信號(hào)量和互斥量的方式

Free RTOS的互斥信號(hào)量

使用Linux信號(hào)量實(shí)現(xiàn)互斥點(diǎn)燈

評(píng)論