2013-08-22 17 views
2

如何禁止在任何應用程序的所有線程的特定CPU內核上運行,除非我指定的線程(在Win/nix中)?我們可以使用POSIX中的OS-API函數:sched_setaffinity()和WINAPI中的SetProcessAffinityMask(),SetThreadAffinityMask()函數來將線程或進程綁定到特定的CPU核心。如何禁止在任何應用程序的所有線程的特定CPU內核上運行,除非我指定的線程?

但是如果我們想要,那些在這些原子核上的許多第三方應用程序的任何其他線程都不會啓動,這些線程當前正在操作系統上運行,怎麼辦?

UPDATE:需要一個實時系統 - 必需由我指定的線程永遠不會發生上下文切換或臨時暫停。

可能的解決方案:

  • 使用實時操作系統,如QNX
  • 除了綁定到處理器核心,實時優先級設置
  • 使用Xen的虛擬化的(POSIX)m鎖()或(WINAPI)VirtualLock()

    :跨操作系統

頁面錯誤很容易利用釘扎存儲器解決處理器核的分佈

+4

只是不要嘗試。繼續,我會咬 - 你真的想要解決什麼XY問題? –

+1

我很確定在Windows或Linux中沒有這種機制 - 一個不做任何事情的CPU對於調度其他線程是公平的。如果你想分離一個特定的工作負載,使用虛擬機設置可能是一個更好的主意,並使用它的能力來劃分整個虛擬機的CPU和內存使用情況。 –

+0

@Martin James需要一個實時系統 - 必須由我指定的線程永遠不會發生上下文切換,或暫時中止。 – Alex

回答

2

如果您將進程和線程設置爲實時優先級,並且他們會將其他所有內容推到一邊。使用SetPriorityClass設置進程的優先級和SetThreadPriority的線程,就像這樣:

SetPriorityClass(HProcess, REALTIME_PRIORITY_CLASS); 
SetThreadPriority(HThread, THREAD_PRIORITY_TIME_CRITICAL); 
+0

謝謝!我只需要設置親和性掩碼來將線程綁定到CPU內核,並將優先級設置爲實時 - 並且它會解決我的問題? – Alex

+1

試一試,讓我們知道你如何繼續。它仍然允許上下文切換你的線程等,但不太可能windows會選擇這些設置來實時(因爲程序很少使用它們)。如果另一個程序確實進入了相同的設置,您最終會與他們共享CPU。 – noelicus

+0

司機...頁面錯誤... OP在做夢。 –

相關問題