6

我想知道是否可以通过特定的线程识别物理处理器(核心)thread-id

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

PS Windows 平台。

谢谢,

丹尼斯。

4

2 回答 2

7

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

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

于 2010-07-29T21:23:03.100 回答
3

有称为GetCurrentProcessorNumber(自 Server 2003 和 Vista 起GetCurrentProcessorNumberEx可用)和(自 Server 2008 R2 和 Windows 7 起可用)的函数。

另请参阅此问题的答案以了解更多相关选项和注意事项(包括 Windows XP - 主要是描述使用 cpuid 指令的此答案)。

当然,调度程序可以随时更改核心编号,因此,如果您需要确定,那么如果您在短时间内测量或执行某事之前和之后检查核心编号,可能会有所帮助,如果核心编号仍然相同,那么您知道中间代码最有可能在哪个核心上执行。

于 2013-12-19T17:43:41.627 回答