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