複製鏈接
請複製以下鏈接發送給好友

優先級翻轉

鎖定
優先級翻轉是當一個高優先級任務通過信號量機制訪問共享資源時,該信號量已被一低優先級任務佔有,因此造成高優先級任務被許多具有較低優先級任務阻塞,實時性難以得到保證。
中文名
優先級翻轉
所屬學科
計算機科學
例如:有優先級為A、B和C三個任務,優先級A>B>C,任務A,B處於掛起狀態,等待某一事件發生,任務C正在運行,此時任務C開始使用某一共享資源S。在使用中,任務A等待事件到來,任務A轉為就緒態,因為它比任務C優先級高,所以立即執行。當任務A要使用共享資源S時,由於其正在被任務C使用,因此任務A被掛起,任務C開始運行。如果此時任務B等待事件到來,則任務B轉為就緒態。由於任務B優先級比任務C高,因此任務B開始運行,直到其運行完畢,任務C才開始運行。直到任務C釋放共享資源S後,任務A才得以執行。在這種情況下,優先級發生了翻轉,任務B先於任務A運行。
解決優先級翻轉問題有優先級天花板(priority ceiling)和優先級繼承(priority inheritance)兩種辦法。
優先級天花板是當任務申請某資源時, 把該任務的優先級提升到可訪問這個資源的所有任務中的最高優先級, 這個優先級稱為該資源的優先級天花板。這種方法簡單易行, 不必進行復雜的判斷, 不管任務是否阻塞了高優先級任務的運行, 只要任務訪問共享資源都會提升任務的優先級。
優先級繼承是當任務A 申請共享資源S 時, 如果S正在被任務C 使用,通過比較任務C 與自身的優先級,如發現任務C 的優先級小於自身的優先級, 則將任務C的優先級提升到自身的優先級, 任務C 釋放資源S 後,再恢復任務C 的原優先級。這種方法只在佔有資源的低優先級任務阻塞了高優先級任務時才動態的改變任務的優先級,如果過程較複雜, 則需要進行判斷。