如何在多核机器上运行的C#dot net代码中使用硬件线程?

如何在多核机器上运行的C sharp代码中使用硬件线程 ? 任何例子将不胜感激。

我希望在我的机器的两个核心上并行运行两个线程。 如果我用C sharp创建正常的软件线程,它们可以在单核上运行。 是否可以在两个内核上隐式并行运行这两个线程,以获得更好的性能?

您可以查看“处理器关联性”。

您可以使用System.Diagnostics命名空间强制进程在特定处理器上运行。 以下行将更改当前与处理器1和2的进程关联

System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)3; 

Process.ProcessorAffinity属性获取或设置可以安排运行此进程中的线程的处理器。

下表显示了双处理器系统的ProcessorAffinity值选择。

  Value Description 0 Not allowed 1 Use processor 1 2 Use processor 2 3 Use both processors 1 and 2 

有关详细信息,请参阅以下MSDN参考 – > http://msdn.microsoft.com/en-us/library/system.diagnostics.process.processoraffinity.aspx

啊,你用THREADS。 就像在System.Threading.Thread中一样。 .NET的所有已知Windows实现都将这些实现映射到硬件线程。

您无法在C#中创建“正常的软件线程”。 你是从哪里得到这个想法的?

调度程序将尽可能地调度所有线程 – 即,它们将并行运行多个内核。

如果您安排软件线程,它们将自动在任何可用的处理器核心上运行 – 例如,如果您有两个或四个处理器核心(硬件),那么您的计算机将并行运行您的两个线程( 如果核心不忙当时做其他事情)。

即,除了创建线程之外,您不需要做任何其他事情,计算机将尽其所能尽可能地利用您的硬件。

通常没有充分理由这样做。 Windows比您在应用程序中更了解可用资源,以便安排和分发它们。

另请参阅此CodeProject文章 ,该文章非常清楚地表明了这一点(以及设置处理器关联性的一些方法)。