我想知道是否可以通过特定的线程识别物理处理器(核心)thread-id
?
例如,我有一个多线程应用程序,它有两 (2) 个线程(例如thread-id = 10
和thread-id = 20
)。我在具有双核处理器(核心 1 和核心 2)的系统上运行应用程序。那么,如何获取线程使用的核心数thread-id = 20
?
PS Windows 平台。
谢谢,
丹尼斯。
我想知道是否可以通过特定的线程识别物理处理器(核心)thread-id
?
例如,我有一个多线程应用程序,它有两 (2) 个线程(例如thread-id = 10
和thread-id = 20
)。我在具有双核处理器(核心 1 和核心 2)的系统上运行应用程序。那么,如何获取线程使用的核心数thread-id = 20
?
PS Windows 平台。
谢谢,
丹尼斯。
除非您使用线程关联,否则线程不会分配给特定的内核。对于每个时间片,线程可以在不同的内核上执行。这意味着,如果有一个函数可以获取线程的核心,那么当您获得返回值时,很有可能该线程已经在另一个核心上执行。
如果您使用的是线程关联,您可以查看 Windows 线程关联函数 ( http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx )。
有称为GetCurrentProcessorNumber
(自 Server 2003 和 Vista 起GetCurrentProcessorNumberEx
可用)和(自 Server 2008 R2 和 Windows 7 起可用)的函数。
另请参阅此问题的答案以了解更多相关选项和注意事项(包括 Windows XP - 主要是描述使用 cpuid 指令的此答案)。
当然,调度程序可以随时更改核心编号,因此,如果您需要确定,那么如果您在短时间内测量或执行某事之前和之后检查核心编号,可能会有所帮助,如果核心编号仍然相同,那么您知道中间代码最有可能在哪个核心上执行。