如何找到每个线程运行的处理器?

时间:2011-11-07 21:26:53

标签: c++ windows

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

我已经使用SetThreadAffinityMask()编写了代码来执行此操作。我得到进程的默认关联掩码,验证是否有足够的处理器来执行此操作,然后将每个线程的关联掩码设置为仅包含一个可用处理器(并且每个线程不同)。

所有这些似乎编译并运行没有问题,但我如何检查它是否真的有效?

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

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

所以我只是认为SetThreadAffinity()将完全按照我的意愿行事吗?

(注意:我在SO上发现了一些看似相似的问题,但没有一个实际上包含这个特定问题的答案)。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

您可以调用GetCurrentProcessorNumber来获取当前正在执行的线程的处理器编号。