识别处理器(核心)由特定线程使用

时间:2010-07-29 21:03:34

标签: windows multithreading processor affinity

我想知道是否可以识别具有特定thread-id的线程使用的物理处理器(核心)?

例如,我有一个多线程应用程序,它有两(2)个线程(例如thread-id = 10thread-id = 20)。我在具有双核处理器(核心1和核心2)的系统上运行该应用程序。那么,我如何获得线程使用thread-id = 20的核心号码?

P.S。 Windows平台。

谢谢,

丹尼斯。

2 个答案:

答案 0 :(得分:7)

除非您使用线程关联,否则不会将线程分配给特定的核心。对于每个时间片,线程可以在不同的核上执行。这意味着如果有一个函数来获取线程的核心,那么当你获得返回值时,线程很可能已经在另一个核心上执行了。

如果您正在使用线程关联,则可以查看Windows线程关联函数(http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx)。

答案 1 :(得分:3)

有一些名为GetCurrentProcessorNumber的功能(自Server 2003和Vista以来可用)和GetCurrentProcessorNumberEx(自Server 2008 R2和Windows 7以来可用)。

有关更多相关选项和注意事项(包括Windows XP - 主要是this question's answers),另请参阅this answer describing the use of cpuid instruction

当然,调度程序可以随时更改核心编号,因此如果您需要确定,那么如果您在测量或执行了少量某事之前和之后检查核心编号,那么它可能有助于获得合理的数量时间,如果核心数仍然相同,那么您知道中间代码最可能在哪个核心上执行。