首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理std::thread::hardware_concurrency()

处理std::thread::hardware_concurrency()
EN

Stack Overflow用户
提问于 2015-01-16 03:14:02
回答 2查看 9.7K关注 0票数 3

在我关于std::threadquestion中,有人建议我使用std::thread::hardware_concurrency()。我在某个地方读到(我找不到它,看起来像是本地代码库之类的),这个特性在4.8之前的g++版本中没有实现。

事实上,我和this用户处于相同的受害者位置。函数将简单地返回0。我在this answer中发现了一个用户实现。欢迎对这个答案的好坏发表评论!

所以我想在我的代码中这样做:

代码语言:javascript
复制
unsinged int cores_n;
#if g++ version < 4.8
 cores_n = my_hardware_concurrency();
#else
 cores_n = std::thread::hardware_concurrency();
#endif

然而,我可以找到一种方法来实现这个结果。我该怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-12 06:09:17

除了使用之外,还有另一种方法:检查std::thread::hardware_concurrency()是否返回零,这意味着该特性(尚未)尚未实现。

代码语言:javascript
复制
unsigned int hardware_concurrency()
{
    unsigned int cores = std::thread::hardware_concurrency();
    return cores ? cores : my_hardware_concurrency();
}

您可能会受到awgn's source code (GPL v2 licensed)的启发来实现my_hardware_concurrency()

代码语言:javascript
复制
auto my_hardware_concurrency()
{
    std::ifstream cpuinfo("/proc/cpuinfo");

    return std::count(std::istream_iterator<std::string>(cpuinfo),
                      std::istream_iterator<std::string>(),
                      std::string("processor"));
}
票数 8
EN

Stack Overflow用户

发布于 2015-01-16 04:50:11

基于Joachim提供的通用预定义宏link,我做到了:

代码语言:javascript
复制
int p;
#if __GNUC__ >= 5 || __GNUC_MINOR__ >= 8 // 4.8 for example
  const int P = std::thread::hardware_concurrency();
  p = (trees_no < P) ? trees_no : P;
  std::cout << P << " concurrent threads are supported.\n";
#else
  const int P = my_hardware_concurrency();
  p = (trees_no < P) ? trees_no : P;
  std::cout << P << " concurrent threads are supported.\n";
#endif
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27971195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档