優先順序反轉解決方案
1. 優先順序反轉(Priority Inversion)
由於多程式共享資源,具有最高優先權的程式被低優先順序程式阻塞,反而使具有中優先順序的程式先於高優先順序的程式執行,導致系統的崩潰。這就是所謂的優先順序反轉(Priority Inversion)。
2. 產生原因
其實,優先順序反轉是在高優級(假設為A)的任務要訪問一個被低優先順序任務(假設為C)佔有的資源時,被阻塞.而此時又有優先順序高於佔有資源的任務(C)而低於被阻塞的任務(A)的優先順序的任務(假設為B)時,於是,佔有資源的任務就被掛起(佔有的資源仍為它佔有),因為佔有資源的任務優先順序很低,所以,它可能一直被另外的任務掛起.而它佔有的資源也就一直不能釋放,這樣,引起任務A一直沒辦法執行.而比它優先低的任務卻可以執行.
所以,一個解決辦法就是提高佔有資源任務的優先順序,讓它正常執行,然後釋放資源,以讓任務A能正常獲取資源而得以執行.
3. 解決方案 ( 優先順序繼承 / 優先順序天花板 )
目前解決優先順序反轉有許多種方法。其中普遍使用的有2種方法:一種被稱作優先順序繼承(priority inheritance);另一種被稱作優先順序極限(priority ceilings)。
A. 優先順序繼承(priority inheritance)
優先順序繼承是指將低優先順序任務的優先順序提升到等待它所佔有的資源的最高優先順序任務的優先順序.當高優先順序任務由於等待資源而被阻塞時,此時資源的擁有者的優先順序將會自動被提升.
B. 優先順序天花板(priority ceilings)
優先順序天花板是指將申請某資源的任務的優先順序提升到可能訪問該資源的所有任務中最高優先順序任務的優先順序.(這個優先順序稱為該資源的優先順序天花板)
A 和B的區別:
優先順序繼承,只有當佔有資源的低優先順序的任務被阻塞時,才會提高佔有資源任務的優先順序,而優先順序天花板,不論是否發生阻塞,都提升.
相關文章
- 優先順序反轉+解決方案
- 個推百億級訊息推送的優先順序解決方案
- CSS優先順序CSS
- 中斷優先順序
- python運算子及優先順序順序Python
- Android程式優先順序Android
- SQL 優先順序join>whereSQL
- java運算子優先順序Java
- nginx快取優先順序Nginx快取
- php運算子優先順序PHP
- css優先順序彙總CSS
- scala隱式轉換優先順序問題
- java setPriority()設定優先順序Java
- [譯]HTTP/2的優先順序HTTP
- 封裝優先順序佇列封裝佇列
- Yarn任務優先順序配置Yarn
- gitignore優先順序小結Git
- css 選擇器優先順序CSS
- CSS的處理優先順序CSS
- java執行緒優先順序Java執行緒
- 資料型別優先順序資料型別
- 深入理解css優先順序CSS
- NLS引數優先順序解析
- 華為路由協議優先順序路由協議
- C++運算子優先順序C++
- VBA運算子的型別及優先順序(轉)型別
- SpringBoot配置檔案優先順序載入順序Spring Boot
- javascript 字串字元順序反轉JavaScript字串字元
- 優先順序點陣圖演算法詳解演算法
- 個推基於 Apache Pulsar 的優先順序佇列方案Apache佇列
- 何為CSS 樣式優先順序CSS
- html優先順序和層疊性HTML
- C 語言運算子優先順序
- 任務卡片優先順序排序-Leangoo排序Go
- css選擇器的優先順序CSS
- C語言運算子優先順序C語言
- 談Nginx的Location匹配優先順序Nginx
- JS與&& 或||運算子 優先順序JS