信號(hào)量?jī)?yōu)先級(jí)反轉(zhuǎn)(翻轉(zhuǎn))與優(yōu)先級(jí)繼承 -- kummer話你知

什么是優(yōu)先級(jí)反轉(zhuǎn)(翻轉(zhuǎn))

優(yōu)先級(jí)反轉(zhuǎn)涨缚,是指在使用信號(hào)量時(shí),可能會(huì)出現(xiàn)的這樣一種不合理的現(xiàn)象甚疟,即:

高優(yōu)先級(jí)任務(wù)被低優(yōu)先級(jí)任務(wù)阻塞仗岖,導(dǎo)致高優(yōu)先級(jí)任務(wù)遲遲得不到調(diào)度。但其他中等優(yōu)先級(jí)的任務(wù)卻能搶到CPU資源览妖。-- 從現(xiàn)象上來(lái)看,好像是中優(yōu)先級(jí)的任務(wù)比高優(yōu)先級(jí)任務(wù)具有更高的優(yōu)先權(quán)揽祥。

具體來(lái)說(shuō):當(dāng)高優(yōu)先級(jí)任務(wù)正等待信號(hào)量(此信號(hào)量被一個(gè)低優(yōu)先級(jí)任務(wù)擁有著)的時(shí)候讽膏,一個(gè)介于兩個(gè)任務(wù)優(yōu)先之間的中等優(yōu)先級(jí)任務(wù)開(kāi)始執(zhí)行——這就會(huì)導(dǎo)致一個(gè)高優(yōu)先級(jí)任務(wù)在等待一個(gè)低優(yōu)先級(jí)任務(wù),而低優(yōu)先級(jí)任務(wù)卻無(wú)法執(zhí)行類(lèi)似死鎖的情形發(fā)生拄丰。

一個(gè)具體的例子:
假定一個(gè)進(jìn)程中有三個(gè)線程Thread1(高)府树、Thread2(中)和Thread3(低),考慮下圖的執(zhí)行情況料按。


優(yōu)先級(jí)反轉(zhuǎn)實(shí)例圖示
  • T0時(shí)刻奄侠,Thread3運(yùn)行,并獲得同步資源SYNCH1载矿;
  • T1時(shí)刻垄潮,Thread2開(kāi)始運(yùn)行,由于優(yōu)先級(jí)高于Thread3闷盔,Thread3被搶占(未釋放同步資源SYNCH1)弯洗,Thread2被調(diào)度執(zhí)行;
  • T2時(shí)刻逢勾,Thread1搶占Thread2牡整;
  • T3時(shí)刻,Thread1需要同步資源SYNCH1溺拱,但SYNCH1被更低優(yōu)先級(jí)的Thread3所擁有逃贝,Thread1被掛起等待該資源
  • 而此時(shí)線程Thread2和Thread3都處于可運(yùn)行狀態(tài)谣辞,Thread2的優(yōu)先級(jí)大于Thread3的優(yōu)先級(jí),Thread2被調(diào)度執(zhí)行沐扳。最終的結(jié)果是高優(yōu)先級(jí)的Thread1遲遲無(wú)法得到調(diào)度泥从,而中優(yōu)先級(jí)的Thread2卻能搶到CPU資源。

上述現(xiàn)象中迫皱,優(yōu)先級(jí)最高的Thread1要得到調(diào)度歉闰,不僅需要等Thread3釋放同步資源(這個(gè)很正常),而且還需要等待另外一個(gè)毫不相關(guān)的中優(yōu)先級(jí)線程Thread2執(zhí)行完成(這個(gè)就不合理了)卓起,會(huì)導(dǎo)致調(diào)度的實(shí)時(shí)性就很差了和敬。

什么是優(yōu)先級(jí)繼承

優(yōu)先級(jí)繼承就是為了解決優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題而提出的一種優(yōu)化機(jī)制。其大致原理是讓低優(yōu)先級(jí)線程在獲得同步資源的時(shí)候(如果有高優(yōu)先級(jí)的線程也需要使用該同步資源時(shí))戏阅,臨時(shí)提升其優(yōu)先級(jí)昼弟。以前其能更快的執(zhí)行并釋放同步資源。釋放同步資源后再恢復(fù)其原來(lái)的優(yōu)先級(jí)奕筐。

帶有優(yōu)先級(jí)繼承調(diào)度過(guò)程

與上圖相比舱痘,到了T3時(shí)刻,Thread1需要Thread3占用的同步資源SYNCH1离赫,操作系統(tǒng)檢測(cè)到這種情況后芭逝,就把 Thread3的優(yōu)先級(jí)提高到Thread1的優(yōu)先級(jí)。此時(shí)處于可運(yùn)行狀態(tài)的線程Thread2和Thread3中渊胸,Thread3的優(yōu)先級(jí)大于Thread2的優(yōu)先級(jí)旬盯,Thread3被調(diào)度執(zhí)行。

Thread3執(zhí)行到T4時(shí)刻翎猛,釋放了同步資源SYNCH1胖翰,操作系統(tǒng)恢復(fù)了Thread3的優(yōu)先級(jí),Thread1獲得了同步資源SYNCH1切厘,重新進(jìn)入可執(zhí)行隊(duì)列萨咳。處于可運(yùn)行狀態(tài)的線程Thread1和Thread2中,Thread1的優(yōu)先級(jí)大于Thread2的優(yōu)先級(jí)疫稿,所以Thread1被調(diào)度執(zhí)行培他。

通過(guò)優(yōu)先級(jí)繼承機(jī)制,可以有效解決優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題而克,使優(yōu)先級(jí)最高的Thread1獲得執(zhí)行的時(shí)機(jī)提前靶壮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市员萍,隨后出現(xiàn)的幾起案子腾降,更是在濱河造成了極大的恐慌,老刑警劉巖碎绎,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螃壤,死亡現(xiàn)場(chǎng)離奇詭異抗果,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奸晴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)冤馏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人寄啼,你說(shuō)我怎么就攤上這事逮光。” “怎么了墩划?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵涕刚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我乙帮,道長(zhǎng)杜漠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任察净,我火速辦了婚禮驾茴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘氢卡。我一直安慰自己锈至,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布译秦。 她就那樣靜靜地躺著裹赴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诀浪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天延都,我揣著相機(jī)與錄音雷猪,去河邊找鬼。 笑死晰房,一個(gè)胖子當(dāng)著我的面吹牛求摇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殊者,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼与境,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了猖吴?” 一聲冷哼從身側(cè)響起摔刁,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎海蔽,沒(méi)想到半個(gè)月后共屈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绑谣,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年拗引,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了借宵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矾削,死狀恐怖壤玫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哼凯,我是刑警寧澤欲间,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站挡逼,受9級(jí)特大地震影響括改,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜家坎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一嘱能、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虱疏,春花似錦惹骂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至装蓬,卻和暖如春著拭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牍帚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工儡遮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暗赶。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓鄙币,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蹂随。 傳聞我的和親對(duì)象是個(gè)殘疾皇子十嘿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本文主要講了java中多線程的使用方法、線程同步岳锁、線程數(shù)據(jù)傳遞绩衷、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等。 首先講...
    李欣陽(yáng)閱讀 2,454評(píng)論 1 15
  • Java多線程學(xué)習(xí) [-] 一擴(kuò)展javalangThread類(lèi) 二實(shí)現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,957評(píng)論 1 18
  • 一唇聘、在后臺(tái)工作量少 當(dāng)用戶(hù)沒(méi)有主動(dòng)使用你的應(yīng)用程序時(shí)版姑,系統(tǒng)會(huì)將其轉(zhuǎn)換為背景狀態(tài)。該系統(tǒng)最終可能會(huì)暫停您的應(yīng)用程序迟郎,...
    弗利撒閱讀 820評(píng)論 1 0
  • 寫(xiě)在前面的話: 這篇博客是我從這里“轉(zhuǎn)載”的剥险,為什么轉(zhuǎn)載兩個(gè)字加“”呢?因?yàn)檫@絕不是簡(jiǎn)單的復(fù)制粘貼宪肖,我花了五六個(gè)小...
    SmartSean閱讀 4,730評(píng)論 12 45
  • 存在都是合理的,雖然中國(guó)股市是T+1交易制度,但是略為變通之后T+0交易依然有舞臺(tái).長(zhǎng)期以來(lái)很多機(jī)構(gòu)和大戶(hù)及基金等...
    無(wú)為老師閱讀 129評(píng)論 0 0