我有一个多线程程序,并且被要求添加一个选项以将每个线程置于其自己的核心(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)