【发布时间】:2011-02-11 05:52:23
【问题描述】:
我正在编写一个小型 C 应用程序,它使用一些线程来处理数据。我希望能够知道某台机器上的处理器数量,而无需将system() & 结合到一个小脚本中。
我能想到的唯一方法是解析 /proc/cpuinfo。还有其他有用的建议吗?
【问题讨论】:
-
几乎是这个问题的一个严格子集:stackoverflow.com/questions/150355/…(最佳答案有一个 linux 单线)。这个问题实际上说的是 C++,但答案也是 C。
-
确实,感谢史蒂夫的反馈,但是如果我可以这样称呼的话,什么被认为是“POSIX 世界”中最便携的方法?
-
不确定。 Linux 支持 _SC_NPROCESSORS_ONLN,但 POSIX 没有强制要求。假设其他答案很好,它在 BSD 上使用完全不同的非 POSIX 机制这一事实表明没有简单的 POSIX 可移植答案。另外,我在网上发现了一个警告,_SC_NPROCESSORS_ONLN 为“我不知道”返回 1 而不是 -1,如果它仍然是真的,那就不好了。
-
glibc 实现
sysconf( _SC_NPROCESSORS_ONLN )的方式是首先尝试 /proc/stat 。如果它在那里,它会计算匹配/^cpu[0-9]/的行。否则,它会查看/proc/cpuinfo,其格式因架构而异。
标签: c posix parallel-processing