【发布时间】:2013-02-18 10:38:16
【问题描述】:
我在旋转等待的地方有延迟关键代码。我想在专用核心上运行它(我总共有 12 个核心,所以可以只为该任务花费一个核心)。 我试过用这种方式完成它:
new Thread(Work).Start();
private void Work()
{
Process Proc = Process.GetCurrentProcess();
ProcessThread Thread = Proc.Threads[0];
var AffinityMask = 0x0002; // use only the second processor, despite availability
Thread.ProcessorAffinity = (IntPtr)AffinityMask;
while (true)
{
Iterate();
}
}
我期待在设置 ProcessorAffinity 后,我的线程将始终在第二个核心上工作,因此我也将 100% 在第二个核心上工作。 但是在任务管理器中,我看不到任何“100”个占用的核心。为什么?如何在专用核心上启动自旋等待线程?
upd 现在我认为这可能是错误的Proc.Threads[0]?我需要current 线程而不是0 线程?
【问题讨论】:
-
您正在尝试做的是违背多线程编程的想法。如果您有足够的处理能力,则没有必要。如果您的资源太少,优先队列就是您的解决方案。
-
你试过为线程设置 IdealProcessor 吗? msdn.microsoft.com/en-us/library/…
-
@DariuszWawer 我确实有足够的能力,但是 .NET 由于某种原因不明白我的线程是自旋等待的,最好在专用核心上运行。
-
@Richard 不,谢谢,我会试试的。
-
@javapowered 所以你实际上是在试图强制一个忙等待的反模式,你失败了,你想使用技巧让编译器/系统做到这一点......对。
标签: c# multithreading