14
A
回答
11
設置線程的優先級和線程親和力
Worker類
class PriorityTest
{
volatile bool loopSwitch;
public PriorityTest()
{
loopSwitch = true;
}
public bool LoopSwitch
{
set { loopSwitch = value; }
}
public void ThreadMethod()
{
long threadCount = 0;
while (loopSwitch)
{
threadCount++;
}
Console.WriteLine("{0} with {1,11} priority " +
"has a count = {2,13}", Thread.CurrentThread.Name,
Thread.CurrentThread.Priority.ToString(),
threadCount.ToString("N0"));
}
}
和測試
class Program
{
static void Main(string[] args)
{
PriorityTest priorityTest = new PriorityTest();
ThreadStart startDelegate =
new ThreadStart(priorityTest.ThreadMethod);
Thread threadOne = new Thread(startDelegate);
threadOne.Name = "ThreadOne";
Thread threadTwo = new Thread(startDelegate);
threadTwo.Name = "ThreadTwo";
threadTwo.Priority = ThreadPriority.Highest;
threadOne.Priority = ThreadPriority.Lowest;
threadOne.Start();
threadTwo.Start();
// Allow counting for 10 seconds.
Thread.Sleep(10000);
priorityTest.LoopSwitch = false;
Console.Read();
}
}
代碼大多來自msdn採取同樣,如果你有可能需要設置thread affinity多核系統。您可能還需要創建更多線程才能看到真正的飢餓。
3
在任務管理器中爲您的應用程序設置線程關聯,使其僅在一個內核上運行。然後以高優先級在應用程序中啓動一個忙線程。
+0
是否有任何其他的方式通過純粹的編碼來做到這一點? (即沒有任務管理器部分) –
+0
@Sean查看進程屬性http://msdn.microsoft.com/en-us/library/76yt3c0w.aspx –
相關問題
- 1. Rails線程飢餓
- 2. 飢餓和線程
- 3. pthread_cond_signal和可能的線程飢餓
- 4. Java線程產生/飢餓問題
- 5. 飢餓與upgrade_lock
- 6. Android模擬器,爲什麼如此資源飢餓?
- 7. DB連接飢餓
- 8. 什麼是飢餓?
- 9. 內存飢餓的多線程應用程序
- 10. 飢餓的Bukkit事件?
- 11. Winforms飢餓控制失效
- 12. Android資源飢餓操作
- 13. 是「線程飢餓死鎖」在這裏發生的
- 14. 並行線程:造成線程飢餓快速的重新鎖定
- 15. CPU飢餓的android模擬器:Android的ARM EABI圖像與x86圖像
- 16. 快樂,飢餓,能量狀態
- 17. 春季調度同步方法飢餓
- 18. Android OpenSLES緩衝區飢餓問題
- 19. Jenkins在CloudBees上執行飢餓
- 20. Java中的「無飢餓」實現
- 21. 死鎖自由與免於飢餓
- 22. CPU飢餓檢測因爲MQ異常
- 23. 在Apache公共池中處理飢餓
- 24. CakePHP的:ID飢餓驅使我堅果
- 25. 具有優先任務並避免飢餓的線程池執行程序
- 26. 管理多線程工作隊列處理器內的ThreadPool飢餓嗎?
- 27. 如何創建公平的鎖解決java中的飢餓?
- 28. 如何在Emacs中綁定飢餓刪除Clojure
- 29. 如何讓作者線程餓死
- 30. 如何避免線程捱餓
很好的例子。您可能希望將loopSwitch聲明爲volatile以防止優化問題。 – Tudor
感謝您的幫助! –
您沒有在代碼中包含任何關聯。在一個多核系統上,這個例子顯示兩個線程都運行了10秒(這不是預期的),除非你在開始處添加該行:Process.GetCurrentProcess()。ProcessorAffinity =(System.IntPtr)1; (它指定只能在第一個處理器上調度線程)。 – Virtlink