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