日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

二值信号量和互斥锁到底有什么区别?

發(fā)布時(shí)間:2025/6/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二值信号量和互斥锁到底有什么区别? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文鏈接:https://www.cnblogs.com/codescrew/p/8970514.html

在說(shuō)明之前我先拋出結(jié)論:互斥鎖和二值信號(hào)量在使用上非常相似,但是互斥鎖解決了優(yōu)先級(jí)翻轉(zhuǎn)的問(wèn)題


假定我們現(xiàn)在有三個(gè)任務(wù),task1,task2,task3,任務(wù)優(yōu)先級(jí)task1最高,然后依次降低。我們知道在系統(tǒng)調(diào)度的時(shí)候當(dāng)兩個(gè)任務(wù)同時(shí)處于就緒態(tài)的時(shí)候,系統(tǒng)會(huì)優(yōu)先執(zhí)行優(yōu)先級(jí)高的任務(wù)

好了,讓我們來(lái)看兩個(gè)案例

優(yōu)先級(jí)翻轉(zhuǎn)分析(使用信號(hào)量)


?在例子中,我們使用pend()函數(shù)來(lái)表示獲取信號(hào)量,用post()函數(shù)來(lái)表示釋放信號(hào)量

如上圖所示,過(guò)程分下面幾步

1.一開(kāi)始task3開(kāi)始運(yùn)行,先獲取到信號(hào)量

2.task1開(kāi)始運(yùn)行嘗試去獲取信號(hào)量失敗被阻塞等待task3執(zhí)行完

3.task3運(yùn)行過(guò)程中,task2被觸發(fā),由于其優(yōu)先級(jí)高于task3,task2被運(yùn)行,浪費(fèi)了大量時(shí)間

4.繼續(xù)運(yùn)行task3,運(yùn)行完后釋放信號(hào)量

5.task1繼續(xù)運(yùn)行

看到這里我們可以得知,本應(yīng)該優(yōu)先級(jí)最高的task1結(jié)果居然是最后開(kāi)始運(yùn)行的,這就是優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象。這明顯是不利的。比如如果有安裝看門(mén)狗,task1在長(zhǎng)時(shí)間沒(méi)有得到執(zhí)行,就會(huì)觸發(fā)看門(mén)狗,導(dǎo)致系統(tǒng)的重啟。

?

改進(jìn)分析(使用互斥鎖)


??在例子中,我們使用lock()函數(shù)來(lái)表示獲取互斥鎖,用unlock()函數(shù)來(lái)表示釋放互斥鎖

如上圖所示,過(guò)程分下面幾步

1.一開(kāi)始task3開(kāi)始運(yùn)行,先獲取到互斥鎖

2.task1開(kāi)始運(yùn)行嘗試去獲取互斥鎖失敗被阻塞等待task3執(zhí)行完,但是此時(shí)提升task3的優(yōu)先級(jí),讓其優(yōu)先級(jí)跟自己一樣

3.task3運(yùn)行過(guò)程中,task2被觸發(fā),由于其優(yōu)先級(jí)低于task3(第2步被提升過(guò)),task2等待運(yùn)行

4.繼續(xù)運(yùn)行task3,運(yùn)行完后釋放互斥鎖

5.task1繼續(xù)運(yùn)行

6.task1執(zhí)行完,執(zhí)行task2

所以過(guò)程跟前面的雖然一樣,但是互斥鎖多做了一個(gè)步驟就是將task3的優(yōu)先級(jí)提升到task1的級(jí)別,防止task2中途出來(lái)攪局浪費(fèi)大量時(shí)間

?

生活中的實(shí)例類比


?

使用信號(hào)量的情況:

領(lǐng)導(dǎo)在臺(tái)上講話。場(chǎng)內(nèi)三個(gè)角色,領(lǐng)導(dǎo),組長(zhǎng),小兵。

小兵先拿起話筒說(shuō)話,領(lǐng)導(dǎo)要講話發(fā)現(xiàn)沒(méi)有話筒,就等待小兵講完。

組長(zhǎng)要講話,由于他比較野蠻,不需要話筒,并制止了小兵說(shuō)話,自己開(kāi)始說(shuō)。

組長(zhǎng)講完,小兵接著講

小兵講完,把話筒給領(lǐng)導(dǎo),領(lǐng)導(dǎo)講完

?

使用互斥鎖的情況:

領(lǐng)導(dǎo)在臺(tái)上講話。場(chǎng)內(nèi)三個(gè)角色,領(lǐng)導(dǎo),組長(zhǎng),小兵。

小兵先拿起話筒說(shuō)話,領(lǐng)導(dǎo)要講話發(fā)現(xiàn)沒(méi)有話筒,就等待小兵講完,并且跟小兵說(shuō),現(xiàn)在你就是領(lǐng)導(dǎo)的身份

組長(zhǎng)要講話,但是他發(fā)現(xiàn)領(lǐng)導(dǎo)已經(jīng)賦予了小兵比自己更高的權(quán)限,自己沒(méi)有權(quán)力打斷,只好作罷

小兵講完,把話筒給領(lǐng)導(dǎo),領(lǐng)導(dǎo)講完

這時(shí)候組長(zhǎng)才開(kāi)始講話



總結(jié)

以上是生活随笔為你收集整理的二值信号量和互斥锁到底有什么区别?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。