簡(jiǎn)單做網(wǎng)站市場(chǎng)推廣計(jì)劃怎么寫
freertos的信號(hào)量和互斥鎖有兩個(gè)比較形象的例子可以解釋兩者的主要用途。
第一個(gè)是信號(hào)量:
使用信號(hào)量的最初目的是為了給共享 資源建立一個(gè)標(biāo)志,該標(biāo)志表示該共享資源被占用情況。這樣,當(dāng)一個(gè)任務(wù)在訪問(wèn)共享資源之前,可以先對(duì)這個(gè)標(biāo)志進(jìn)行查詢,從而在了解資源被占用的情況之后,再來(lái)決定自己的行為。
例如停車場(chǎng),假如停車場(chǎng)有一百個(gè)停車位,那么在沒(méi)有車輛駛 入的情況下信號(hào)量就是100,當(dāng)駛?cè)胍惠v汽車信號(hào)量減1,駛出一輛汽車信號(hào)量就加1。當(dāng)駛?cè)氲钠?為100的時(shí)候,信號(hào)量就會(huì)為0,這個(gè)時(shí)候如果還有汽車準(zhǔn)備駛?cè)胪\噲?chǎng)就無(wú)法再獲取到信號(hào)量了從 而禁止駛?cè)?。直到有汽車駛出停車?chǎng)后信號(hào)量才會(huì)被釋放,這個(gè)時(shí)候之前想要駛?cè)胪\噲?chǎng)的汽車就會(huì)獲得剛剛釋放的信號(hào)量從而準(zhǔn)許進(jìn)入停車場(chǎng)。
例子來(lái)源雅特力的freertos的學(xué)習(xí)資料。
第二個(gè)互斥鎖:
從互斥信號(hào)量這個(gè)名字就知道是為了資源互斥訪問(wèn)而設(shè)計(jì)的,它和二值信號(hào)量都有資源互斥訪問(wèn)的功 能,只是二值信號(hào)量可能會(huì)發(fā)生優(yōu)先級(jí)翻轉(zhuǎn)的問(wèn)題,而互斥信號(hào)量則采取了措施盡量回避 這個(gè)問(wèn)題。
舉個(gè)例子,互斥鎖就像列車的上的衛(wèi)生間,當(dāng)有人進(jìn)去的時(shí)候一關(guān)門就會(huì)提示,衛(wèi)生間有人,其他人再想進(jìn)這個(gè)衛(wèi)生間就必須等上一個(gè)人主動(dòng)從衛(wèi)生間出來(lái),這里有個(gè)細(xì)節(jié)就是必須他自己(獲取鎖的線程)釋放資源,不能別人(別的線程)給他釋放。而信號(hào)量是沒(méi)有這個(gè)限制的。
然后是優(yōu)先級(jí)翻轉(zhuǎn)的問(wèn)題,
為什么互斥鎖可以盡量將優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題降到最低,因?yàn)?#xff0c;互斥鎖有優(yōu)先級(jí)繼承的機(jī)制。
舉個(gè)例子,當(dāng)一個(gè)高優(yōu)先級(jí)任務(wù)想要獲取某互斥信號(hào)量,但是該信號(hào)量被某低優(yōu)先級(jí)的任務(wù)所持有,此時(shí)高優(yōu)先級(jí)的任務(wù)就會(huì)進(jìn)入阻塞態(tài),在進(jìn)入阻塞態(tài)之前此高優(yōu)先級(jí)的任務(wù)會(huì)將持有互斥信號(hào)量的低優(yōu)先級(jí)的任務(wù)的優(yōu)先級(jí)提高到和高優(yōu)先級(jí)任務(wù)相同的優(yōu)先級(jí)。這樣某個(gè)中優(yōu)先級(jí)的任務(wù)就不會(huì)打斷這個(gè)低優(yōu)先級(jí)的任務(wù),這個(gè)低優(yōu)先級(jí)的任務(wù)就可以盡快使用完資源釋放給高優(yōu)先級(jí)任務(wù)。