如何使用专用内核进行旋转等待线程?

时间:2013-02-18 10:38:17

标签: c# multithreading

我有延迟关键代码,我在那里旋转等待。我想在专用内核上运行它(完全我有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”占用的核心。为什么?如何在专用核心上启动自旋等待线程?

更新现在我觉得这可能是错误的Proc.Threads[0]?我需要current线程而不是0线程?

1 个答案:

答案 0 :(得分:0)

你不会因为你在那个线程上设置线程关联而不会看到100%,因为操作系统仍然会在该核心上安排其他线程,而你的线程只会获得一部分周期。

如果您还设置了Process.BasePriority = RealTime和Thread.Priority = Highest,那么您可能会在该核心上看到 close 达到100%。 (我不建议在生产代码中使用它。)

根据 对您的操作的时间要求如何,.Net平台可能还不够。