Threadx 優先級翻轉-優先級繼承

優先級翻轉

優先級翻轉是指較低優先級已經獲得臨界資源,這時較高優先級線程也需要獲得的這個臨界資源時,較高優先級線程會被掛起,等待資源釋放。如果這時中等優先級任務搶佔了低優先級任務,就出現了低優先級任務先執行,高優先級任務在等待,而且時間也變得不確定。
實時系統最大特點就是高優先級任務能夠在確定時間進行響應,並且能夠搶佔低優先級任務。優先級翻轉現象打破了這種規則,使系統變得不穩定。
舉例:
1,線程a執行,並獲取了互斥量M
2,線程b搶佔了線程a
3,發生中斷,喚醒了線程c,把線程c加到了就緒隊列,並且線程c是所有就緒線程中優先級最高線程。線程c執行並企圖獲取互斥量M,由於未能獲取,自我掛起。切換到線程b繼續執行。
4,直到線程b執行完,切換到線程a,線程a釋放互斥量M,高優先級線程c才能繼續執行。
高優先級線程c的執行響應時間發生了不確定性。
在這裏插入圖片描述
解決線程優先級翻轉方法:
1,應用開發者通過合理設置線程優先級和資源來防止優先級翻轉
2,低優先級線程獲取共享資源時,可以設置搶佔門限避免中等優先級的線程搶佔執行
3,線程可以用互斥量的優先級繼承選項來排除不確定的優先級翻轉。

優先級繼承

優先級繼承是指 高優先級的線程申請被低優先級線程佔有的互斥量時,低優先級會得到高優先級,當低優先級線程釋放互斥量後,會恢復到原來的優先級。 也就是讓低優先級任務短暫變爲高優先級,阻止了中等優先級的搶佔。
Threadx系統中只有互斥量有優先級繼承選項,信號量沒有。

參考:嵌入式實時操作系統的多線程計算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章