例子
考慮下例:
Job Name | Priority |
H | High |
M | Medium |
L | Low |
假定L獲取到共享資源後,H申請該資源不得而被阻塞。優先權繼承協定把L的優先權升級到H的級別。M將不能搶先L因而M被阻塞。當L釋放資源後,恢復到低優先權並喚醒H。H有高優先權因而搶先了L的執行權。隨後M、L依次恢復執行。
作用
為了解決由於優先權翻轉引起的問題,Solaris和WinCE引入了優先權繼承的解決方法。 優先權繼承也就是,高優先權進程T在等待低優先權的執行緒T繼承占用的競爭資源時,為了使T能夠儘快獲得調度運行,由作業系統把T的優先權提高到T的優先權,從而讓T以T的優先權參與調度,儘快讓T執行並釋放調T欲獲得的競爭資源,然後T的優先權調整到繼承前的水平,此時T可獲得競爭資源而繼續執行。
有了優先權繼承之後的上述現象的執行情況如 圖1所示。
圖二中,到了 T3 時刻,Thread1需要Thread3占用的同步資源SYNCH1,作業系統檢測到這種情況後,就把Thread3的優先權提高到Thread1的優先權。此時處於可運行狀態的執行緒Thread2和Thread3中,Thread3的優先權大於Thread2的優先權,Thread3被調度執行 。
Thread3執行到 T4 時刻,釋放了同步資源SYNCH1,作業系統何時恢復了Thread3的優先權,Thread1獲得了同步資源SYNCH1,重新進入可執行佇列。處於可運行狀態的執行緒Thread1和Thread2中,Thread1的優先權大於Thread2的優先權,所以Thread1被調度執行。
上述機制,使優先權最高的Thread1獲得執行的時機提前。