我有一个多线程程序,并且被要求添加一个选项,将每个线程放在它自己的核心(CPU,处理器等)。
我已经使用SetThreadAffinityMask()编写了代码来执行此操作。我得到进程的默认关联掩码,验证是否有足够的处理器来执行此操作,然后将每个线程的关联掩码设置为仅包含一个可用处理器(并且每个线程不同)。
所有这些似乎编译并运行没有问题,但我如何检查它是否真的有效?
似乎应该有一些监视工具显示一个线程正在运行的CPU,但我找不到它。 ProcessExplorer
将显示线程的CPU利用率,但不显示发生在哪个CPU上。我查看了可以在perfmon
上使用的可能计数器,但我再次找到%利用率,而不是哪个CPU。
有人建议我做一个GetThreadAffinityMask()并报告,但在我看来,只会报告我正确调用了SetThreadAffinityMask()。
所以我只是认为SetThreadAffinity()将完全按照我的意愿行事吗?
(注意:我在SO上发现了一些看似相似的问题,但没有一个实际上包含这个特定问题的答案)。
答案 0 :(得分:2)
使用GetCurrentProcessorNumber()
(http://msdn.microsoft.com/en-us/library/windows/desktop/ms683181(v=vs.85).aspx)
答案 1 :(得分:1)
您可以调用GetCurrentProcessorNumber来获取当前正在执行的线程的处理器编号。