我想知道是否可以识别具有特定thread-id
的线程使用的物理处理器(核心)?
例如,我有一个多线程应用程序,它有两(2)个线程(例如thread-id = 10
和thread-id = 20
)。我在具有双核处理器(核心1和核心2)的系统上运行该应用程序。那么,我如何获得线程使用thread-id = 20
的核心号码?
P.S。 Windows平台。
谢谢,
丹尼斯。
答案 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。
当然,调度程序可以随时更改核心编号,因此如果您需要确定,那么如果您在测量或执行了少量某事之前和之后检查核心编号,那么它可能有助于获得合理的数量时间,如果核心数仍然相同,那么您知道中间代码最可能在哪个核心上执行。