我们可以在C#应用程序中设置两个线程或两个任务以不同的处理器亲和力执行吗?

我已经阅读了有关SetThreadAffinityMask的信息,但没有找到应如何使用它的示例。

另外,TPL(任务并行库)是否可以执行两个优先级高的线程/任务以使用100%CPU?

最佳答案

ProcessProcessThread对象具有ProcessorAffinity类型的IntPtr属性,可以直接对其进行操作以读取/更改最多64个处理器的相似性:
using System.Diagnostics;... Process Proc = Process.GetCurrentProcess(); long AffinityMask = (long)Proc.ProcessorAffinity; AffinityMask &= 0x000F; // use only any of the first 4 available processors Proc.ProcessorAffinity = (IntPtr)AffinityMask; ProcessThread Thread = Proc.Threads[0]; AffinityMask = 0x0002; // use only the second processor, despite availability Thread.ProcessorAffinity = (IntPtr)AffinityMask;...
您还可以使用线程的IdealProcessor属性,使调度程序更喜欢在指定处理器上运行线程(无保证)。

是的,就是这么简单:)

引用:MSDN ProcessThread.ProcessorAffinity Property

关于c# - 如何在.NET中设置处理器关联性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2510593/

10-11 01:53