回答
替代
- 優先級上限提升
- 優先級繼承和優先級上限的組合都可以使用。
prio天花板促銷與prio繼承有什麼不同?
優先繼承:當一個高優先級任務開始等待一個低優先級任務拍攝的互斥體,低優先級任務的優先級被臨時提高到了高優先級任務。這使優先級較低的任務即使在被中等優先級任務搶佔時也能繼續運行。
缺點:
a。如果低優先級的prio繼承基於幾個隨機事件序列,則不能輕易確定升級低prio任務的中級任務等待期。
b。如果提升的任務等待另一個任務持有的另一個互斥量,則該任務的優先級也必須提升。這被稱爲優先傳播。系統行爲變得難以確定。
c。再次,如果一個更高優先級的任務現在開始等待這個升級的低級任務,那麼升級後的低級任務必須再次升級並再次傳播,這使得系統行爲更難以確定。
優先級上限促進:創建時優先級上限爲每一個互斥體指定。這等於可以採用互斥鎖的最高優先級任務的優先級。當一個低級別的任務使用這個互斥量時,它的prio會立即被提升到最高限度。因此,只要它擁有互斥量,中間任務就不能搶佔這個任務。
缺點:
一個。如果低級任務經常使用互斥體並且很少使用高級任務,那麼不必要地中級任務將被禁止搶佔低級任務。
我知道這是一個古老的問題,但我一直在自己研究這個話題,需要一個地方來說明我的結論。下面是隨機提升背後的想法,您在評論中詢問了這個問題:
當高優先級線程阻塞資源時,選擇一個優先級較低的隨機就緒線程。將該線程的優先級提升爲被阻塞的線程的優先級,並假定其足以釋放該資源。然後放下優先級並選擇另一個線程。重複此操作,直到資源被釋放。
我不知道有關該算法的任何形式分析,但顯然優先級繼承和由@ShreyasS覆蓋的優先級上限在減少優先級反轉時間方面更有效。他們有多高效,我不知道。當然這取決於應用程序,因此無論如何都需要進行測試。
但是,優先級繼承和最大限制的一大缺點是,它們只能用於擁有所有者概念的資源(例如互斥鎖)。換句話說,如果有機會,調度器知道哪個線程可以釋放資源。另一方面,優先提升更爲普遍,即使在非自有資源(例如信號量)上也可以優先反轉。
從概念上講,如果您願意投入時間,所有三種算法都可以結合使用。這裏有一些快速的想法。擁有的資源只能在專門爲其配置的情況下才能使用通用繼承和最高限額。非自有資源可以使用優先級提升。但即使在這種情況下,可升級線程的集合也可能受到限制,例如僅限於那些擁有資源句柄的進程。如果跟蹤資源索賠和發佈之間的時間,則提升時間也可以是自適應的。
- 1. 繼承EF代碼優先
- 2. VxWorks如何處理優先級繼承?
- 3. C++:繼承優先
- 4. Repast Symphony調度方法優先級和代理優先級
- 5. NSOperationQueue操作優先級
- 6. 優先級一元操作
- 7. Javascript ++操作符優先級
- 8. EF代碼優先配置中的多級繼承
- 9. 用SQL Server Express代碼優先;操作系統錯誤2
- 10. EF6代碼優先繼承back-reference
- 11. 替代方法來捕獲屏幕? (C++,windows操作系統)
- 12. EF5兩級繼承,TPT + TPH(代碼優先)
- 13. 如何在代碼中實現多級繼承優先
- 14. 實體框架+多級繼承+ EF代碼優先
- 15. 從祖先的祖先繼承方法
- 16. matlab低優先級系統調用
- 17. 通過方法語法調用的操作符方法的優先級
- 18. 操作的優先級在Haskell
- 19. 信號量和互斥量在優先級反轉方面的區別(也可能是優先級繼承)
- 20. Blackberry操作系統5.0之前的FilePicker替代方案
- 21. 解析系統日誌優先級值(PRIVAL)的算法
- 22. Ruby示波器,常量優先級:詞法作用域或繼承樹
- 23. 優先級和掩碼操作
- 24. 萊克斯優先級標記操作碼優先
- 25. Linux中的新進程從父進程的優先級繼承
- 26. python heapq替換優先級
- 27. C++:原始成員與繼承成員的優先級?
- 28. Linux上pthread互斥體的默認優先級繼承策略?
- 29. 從模板堆繼承的模板化優先級隊列
- 30. 有沒有優先級繼承不可取的情況?
謝謝。我也遇到了隨機提振。你能詳細說明一下嗎? –