efu*_*eko 17 linux multicore smp
据推测,有一个库或简单的asm blob可以获取我正在执行的当前CPU的编号.
Joh*_*itb 21
使用sched_getcpu以确定在其上调用线程运行的CPU.请参阅man getcpu(系统调用)和man sched_getcpu(库包装器).不过,请注意它的内容:
放置在cpu中的信息仅保证在调用时是最新的:除非使用sched_setaffinity(2)修复了CPU亲和性,否则内核可能随时更改CPU.(通常情况下,这不会发生,因为调度程序会尝试最小化CPU之间的移动以保持缓存热,但这是可能的.)当cpu和节点不再是当前的CPU和节点时,调用者必须准备好处理这种情况.
你需要做一些事情:
现在,您可以在需要时再次CPUID并查找您所在的核心.
但我会问你为什么需要这样做; 通常你想通过sched_setaffinity来控制,而不是找出你所在的核心(甚至那是一个非常罕见的想要/需要的东西).(这就是为什么我不知道究竟什么从CPUID中取出的关键细节,对不起!)
更新:刚从litb的响应中了解到sched_getcpu.好多了!(我的Debian/etch libc太老了,不过它).