【发布时间】:2015-01-15 19:14:02
【问题描述】:
在我的question 关于std::thread 中,有人建议我使用std::thread::hardware_concurrency()。我在某处读到(我找不到它,看起来像是本地代码存储库或其他东西),4.8 之前的 g++ 版本没有实现此功能。
事实上,我和this用户处于同一个受害者位置。该函数将简单地返回 0。我在this 中找到了一个用户实现的答案。欢迎评论这个答案好不好!
所以我想在我的代码中这样做:
unsinged int cores_n;
#if g++ version < 4.8
cores_n = my_hardware_concurrency();
#else
cores_n = std::thread::hardware_concurrency();
#endif
但是,我可以找到实现此结果的方法。我该怎么办?
【问题讨论】:
-
阅读online documentation 可能会有所帮助,尤其是关于common pre-defined macros。
-
即使实现了
hardware_concurrency,也不能将其作为对核心数量的直接映射。这就是标准所说的返回 - 硬件线程上下文的数量。并继续说明 - 此值仅应被视为提示 如果您的机器启用了超线程,则返回的值完全有可能是核心数的 2 倍。如果您想要一个可靠的答案,您需要使用您的操作系统提供的任何工具。 -
我正在阅读链接,谢谢 Joachim! @Praetorian 我链接的答案没有提到这一点,好点。
标签: c++ multithreading c++11 g++ version