亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

二進制信號量和互斥量之間的區別

二進制信號量和互斥量之間的區別

阿晨1998 2019-08-14 16:09:14
二進制信號量和互斥量之間的區別二進制信號量和互斥量之間是否存在差異,或它們基本相同?
查看完整描述

3 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

它們不是一回事。它們用于不同的目的!
雖然兩種類型的信號量都具有完整/空狀態并使用相同的API,但它們的使用方式卻截然不同。

互斥信號量
互斥信號量用于保護共享資源(數據結構,文件等)。

Mutex信號量由接受它的任務“擁有”。如果任務B嘗試semGive當前由任務A持有的互斥鎖,則任務B的調用將返回錯誤并失敗。

互斥鎖始終使用以下順序:

  -  SemTake
  - 關鍵部分
  -  SemGive

這是一個簡單的例子:

  線程A線程B.
   以Mutex為例
     訪問數據
     ......拿Mutex <==將阻止
     ...
   提供互斥鎖訪問數據<==取消阻止
                                  ...
                                給Mutex

Binary Semaphore
Binary Semaphore解決了一個完全不同的問題:

  • 任務B等待發生某事(例如傳感器被絆倒)。

  • 傳感器跳閘和中斷服務程序運行。它需要通知行程的任務。

  • 任務B應該運行并對傳感器跳閘采取適當的措施。然后回去等。

   Task A                      Task B
   ...                         Take BinSemaphore   <== wait for something
   Do Something Noteworthy
   Give BinSemaphore           do something    <== unblocks

請注意,對于二進制信號量,B可以使用信號量和A來提供它。
同樣,二進制信號量不保護資源不被訪問。給予和獲取信號量的行為從根本上是分離的。
對于相同的任務而言,通常對于給予和獲取相同的二進制信號量沒有多大意義。


查看完整回答
反對 回復 2019-08-14
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

廁所的例子是一個令人愉快的比喻:

互斥:

是廁所的關鍵。一個人可以擁有鑰匙 - 占用廁所 - 當時。完成后,該人員將(釋放)密鑰提供給隊列中的下一個人。

正式說:“互斥鎖通常用于序列化對一部分重入代碼的訪問,這些代碼不能由多個線程同時執行?;コ鈱ο笾辉试S一個線程進入受控部分,強制其他線程嘗試訪問該部分要等到第一個線程退出該部分?!?nbsp;參考:Symbian開發人員庫

(互斥體實際上是一個值為1的信號量。)

信號:

是免費相同的廁所鑰匙的數量。例如,我們說有四個帶有相同鎖和鑰匙的馬桶。信號量計數 - 鍵數 - 在開始時設置為4(所有四個廁所都是免費的),然后計數值隨著人們的進入而減少。如果所有廁所都已滿,即。沒有剩余的自由鍵,信號量計數為0.現在,當eq。一個人離開廁所,信號量增加到1(一個自由鍵),并給予隊列中的下一個人。

正式地說:“信號量將共享資源的同時用戶數量限制為最大數量。線程可以請求訪問資源(遞減信號量),并且可以發信號通知他們已經完成了使用資源(遞增信號量)。 “ 參考:Symbian開發人員庫


查看完整回答
反對 回復 2019-08-14
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

Mutex只能由獲取它的線程釋放,而您可以從任何其他線程(或進程)發出信號量信號,因此信號量更適合某些同步問題,如producer-consumer。

在Windows上,二進制信號量更像是事件對象而不是互斥體。


查看完整回答
反對 回復 2019-08-14
  • 3 回答
  • 0 關注
  • 1443 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號