是否有 Windows API 或任何方法来确定我当前线程在哪个物理处理器/内核上运行?我不需要那些信息。我只是好奇。
我对允许线程运行的处理器不感兴趣。我想知道它目前在哪一个上运行。我知道线程从一个线程切换到另一个线程非常快......
线程通常会从一个处理器切换到另一个处理器,所以这有点没有意义,但你可以使用GetCurrentProcessorNumber
.
正如其他人所说,您可以使用GetProcessAffinityMask
or GetThreadIdealProcessor
,但只有当您已经为线程设置了关联掩码或理想处理器时,这些才会起作用。
您可以使用GetProcessAffinityMask查询处理器亲和性。如果您没有设置处理器关联,我不确定结果会有多大用处,因为线程可以在处理器之间切换。
要使用 Windows API 控制您的进程或线程在哪个处理器上运行,您可以使用SetThreadAffinityMask或SetProcessAffinityMask。
这些通过在位掩码中设置位来工作,其中每个位代表您的线程或进程可以调度的处理器:
BOOL WINAPI SetProcessAffinityMask(
__in HANDLE hProcess,
__in DWORD_PTR dwProcessAffinityMask
);
调用GetProcessAffinityMask以发现哪些处理器可用于这些调用。