另一种解决方案是使用hwloc。这是一个简单的例子:
#include <hwloc.h>
#include <stdio.h>
int main(){
// Allocate, initialize, and perform topology detection
hwloc_topology_t topology;
hwloc_topology_init(&topology);
hwloc_topology_load(topology);
// Try to get the number of CPU cores from topology
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_CORE);
if(depth == HWLOC_TYPE_DEPTH_UNKNOWN)
printf("*** The number of cores is unknown\n");
else
printf("*** %u core(s)\n", hwloc_get_nbobjs_by_depth(topology, depth));
// Destroy topology object and return
hwloc_topology_destroy(topology);
return 0;
}
我在一个运行 Red Hat 4.1.2-48 和 GCC 4.1.2 的 Linux 机器上,以及一个运行 OS X 10.8.1 和 GCC 4.2.1 的 Apple 上测试了这个