我有一个多线程程序,并且被要求添加一个选项以将每个线程置于其自己的核心(CPU,处理器等)上。

我已经使用SetThreadAffinityMask()编写了实现此目的的代码。我得到了进程的默认亲和力掩码,请验证是否有足够的处理器来执行此操作,然后将每个线程的亲和力掩码设置为仅包括一个可用处理器(每个线程都不同)。

所有这一切似乎都可以编译并运行,但没有问题,但是如何检查它是否确实有效?

似乎应该有一些监视工具可以显示线程在哪个CPU上运行,但我找不到它。 ProcessExplorer将显示线程的CPU使用率,但不显示发生在哪个CPU上。我仔细研究了可以在perfmon上使用的计数器,但是我只能找到%利用率,而不是哪个CPU。

有人建议我做一个GetThreadAffinityMask()并报告它,但是在我看来,这只会报告我正确地调用了SetThreadAffinityMask()。

因此,我是否应该相信SetThreadAffinity()会完全按照我的意愿进行操作?

(注意:我在SO上发现了许多看似相似的问题,但实际上没有包含针对该特定问题的答案)。

最佳答案

使用GetCurrentProcessorNumber()(http://msdn.microsoft.com/en-us/library/windows/desktop/ms683181(v=vs.85).aspx)

09-10 04:06
查看更多