sched_getcpu()等效于OS X?

时间:2015-11-16 21:55:45

标签: c macos cpu scheduler processor

在OS X上,有没有办法找出线程正在运行的CPU? Linux的等效函数是sched_getcpu

1 个答案:

答案 0 :(得分:4)

GetCurrentProcessorNumber示例显示了使用CPUID指令实现此功能的代码。我亲自尝试过,可以确认它适用于Mac OS X.

这是我在Mac OS X上使用的版本

#include <cpuid.h>

#define CPUID(INFO, LEAF, SUBLEAF) __cpuid_count(LEAF, SUBLEAF, INFO[0], INFO[1], INFO[2], INFO[3])

#define GETCPU(CPU) {                              \
        uint32_t CPUInfo[4];                           \
        CPUID(CPUInfo, 1, 0);                          \
        /* CPUInfo[1] is EBX, bits 24-31 are APIC ID */ \
        if ( (CPUInfo[3] & (1 << 9)) == 0) {           \
          CPU = -1;  /* no APIC on chip */             \
        }                                              \
        else {                                         \
          CPU = (unsigned)CPUInfo[1] >> 24;                    \
        }                                              \
        if (CPU < 0) CPU = 0;                          \
      }