【发布时间】:2011-05-30 17:33:06
【问题描述】:
在 C# 中,是否有任何方法可以获取正在执行线程的内核的 cpu id(或内核编号)?我有一个四核处理器,我想知道在跨越一些线程时,它们被分配了哪些内核?
我发现 System.Environment.ProcessorCount 给出了当前 cpu 的总数,但是有没有办法知道哪个特定的 cpu 实例正在执行给定的线程。
【问题讨论】:
-
线程在其整个生命周期内不一定会保留在一个特定的 CPU 上。
-
一个线程可以在一行代码中间切换内核
-
控制线程分配的唯一方法是使用 CPU 亲和性。
-
你为什么想知道这个?可能有更合适的技术。
-
@bestsss,你不能在 C# 不安全的代码中这样做。这将需要一些汇编代码。像 asm { mov eax,1; cpuid; shr ebx,24;之后 ebx 寄存器将具有 APIC,我从未使用过托管 C++,也许可以用它来完成。
标签: c# multithreading