C# 为C中的线程指定一个特殊cpu#

C# 为C中的线程指定一个特殊cpu#,c#,multithreading,cpu,C#,Multithreading,Cpu,我有两条线。我想告诉其中一个在第一个cpu上运行,第二个在第二个cpu上运行,例如在一台有两个cpu的机器上。我该怎么做 这是我的密码 UCI UCIMain = new UCI(); Thread UCIThread = new Thread(new ThreadStart(UCIMain.main)); UCIThread.Priority = ThreadPriority.BelowNormal; UCIThread.Start(); 当然,类UCI有一个名为main的成员函数。我想在第

我有两条线。我想告诉其中一个在第一个cpu上运行,第二个在第二个cpu上运行,例如在一台有两个cpu的机器上。我该怎么做

这是我的密码

UCI UCIMain = new UCI();
Thread UCIThread = new Thread(new ThreadStart(UCIMain.main));
UCIThread.Priority = ThreadPriority.BelowNormal;
UCIThread.Start();
当然,类
UCI
有一个名为
main
的成员函数。我想在第一个处理器中设置此线程,例如.NET上的

,您有和

但是,由于您谈论的是
线程
,而不是
进程
,因此我认为在.NET中没有直接可用的方法来实现这一点


Thread.SetProcessorAffinity()
,但它仅适用于Xbox上的XNA。

不要这样做。OS任务调度器比手动调整要聪明得多。从技术上讲,你可以使用,但这通常不是一个好主意。而是使用线程池或TPL库


如果一个核心是超级忙,而另一个不是。然后,一个线程将缺乏处理能力,而另一个核心将根本无法加载。

我不建议这样做,但如果您真的需要:可以通过点击本机Win32系统调用,特别是
SetThreadAffinityMask
。您需要执行一些
DllImport
s:

[DllImport("kernel32.dll")]
static extern IntPtr GetCurrentThread();
[DllImport("kernel32.dll")]
static extern IntPtr SetThreadAffinityMask(IntPtr hThread, IntPtr dwThreadAffinityMask);
然后在每个衍生线程中使用它们(当然,掩码的参数不同):


关心的理由是什么?(…不想挖苦人)有像任务并行库这样的工具可以为我们优化这些关注点-为什么要重新发明轮子?也许最好让操作系统来决定。很明显,它只使用一个处理器-很明显,由于其他原因,它只能使用一个CPU。你解决了错误的问题。如果使用率是50%的CPU,那么我打赌Henk是100%正确的-只有一个线程正在运行。如果两个线程一直处于就绪状态,操作系统肯定会在每个内核上运行一个线程。问题是我的程序只使用了50%的cpu。很明显,它只使用一个处理器。您可以描述这两个线程的功能吗?你能发布一些简化的代码吗?他们在做IO吗?看我的编辑,没有现成的线程解决方案。是的-你可能想编辑这个答案,因为我的答案被@casperOne删除了-一个假定的版主。。。!谢谢就这么做了。如果你的被删除了,我的也应该被删除
// set affinity of current thread to the given cpuID
SetThreadAffinityMask(GetCurrentThread(), new IntPtr(1)); // CPU 0