2014-02-19 51 views

回答

2

替代

  1. 優先級上限提升
  2. 優先級繼承和優先級上限的組合都可以使用。

prio天花板促銷與prio繼承有什麼不同?

優先繼承:當一個高優先級任務開始等待一個低優先級任務拍攝的互斥體,低優先級任務的優先級被臨時提高到了高優先級任務。這使優先級較低的任務即使在被中等優先級任務搶佔時也能繼續運行。

缺點:

a。如果低優先級的prio繼承基於幾個隨機事件序列,則不能輕易確定升級低prio任務的中級任務等待期。

b。如果提升的任務等待另一個任務持有的另一個互斥量,則該任務的優先級也必須提升。這被稱爲優先傳播。系統行爲變得難以確定。

c。再次,如果一個更高優先級的任務現在開始等待這個升級的低級任務,那麼升級後的低級任務必須再次升級並再次傳播,這使得系統行爲更難以確定。

優先級上限促進:創建時優先級上限爲每一個互斥體指定。這等於可以採用互斥鎖的最高優先級任務的優先級。當一個低級別的任務使用這個互斥量時,它的prio會立即被提升到最高限度。因此,只要它擁有互斥量,中間任務就不能搶佔這個任務。

缺點:

一個。如果低級任務經常使用互斥體並且很少使用高級任務,那麼不必要地中級任務將被禁止搶佔低級任務。

+1

謝謝。我也遇到了隨機提振。你能詳細說明一下嗎? –

0

我知道這是一個古老的問題,但我一直在自己研究這個話題,需要一個地方來說明我的結論。下面是隨機提升背後的想法,您在評論中詢問了這個問題:

當高優先級線程阻塞資源時,選擇一個優先級較低的隨機就緒線程。將該線程的優先級提升爲被阻塞的線程的優先級,並假定其足以釋放該資源。然後放下優先級並選擇另一個線程。重複此操作,直到資源被釋放。

我不知道有關該算法的任何形式分析,但顯然優先級繼承和由@ShreyasS覆蓋的優先級上限在減少優先級反轉時間方面更有效。他們有多高效,我不知道。當然這取決於應用程序,因此無論如何都需要進行測試。

但是,優先級繼承和最大限制的一大缺點是,它們只能用於擁有所有者概念的資源(例如互斥鎖)。換句話說,如果有機會,調度器知道哪個線程可以釋放資源。另一方面,優先提升更爲普遍,即使在非自有資源(例如信號量)上也可以優先反轉。

從概念上講,如果您願意投入時間,所有三種算法都可以結合使用。這裏有一些快速的想法。擁有的資源只能在專門爲其配置的情況下才能使用通用繼承和最高限額。非自有資源可以使用優先級提升。但即使在這種情況下,可升級線程的集合也可能受到限制,例如僅限於那些擁有資源句柄的進程。如果跟蹤資源索賠和發佈之間的時間,則提升時間也可以是自適應的。