为什么使用std :: thread :: hardware_concurrency()和boost :: thread :: hardware_concurrency()有区别?

问题本身的描述非常简单。 我正在testing在C + + 11和boost ::线程库的std ::线程库的差异。

这些输出:

#include <iostream> #include <thread> #include <boost/thread.hpp> int main() { std::cout << std::thread::hardware_concurrency() << std::endl; std::cout << boost::thread::hardware_concurrency() << std::endl; return 0; } 

给了我不同的结果:

 0 4 

这是为什么?

PS:gcc软件包的版本是4.6.2-1.fc16(x86_64)。 我在用着

 g++ test.cc -Wall -std=c++0x -lboost_thread-mt -lpthread 

Solutions Collecting From Web of "为什么使用std :: thread :: hardware_concurrency()和boost :: thread :: hardware_concurrency()有区别?"

在审查/usr/include/c++/4.6.2/thread

可以看出这个实现实际上是:

 // Returns a value that hints at the number of hardware thread contexts. static unsigned int hardware_concurrency() { return 0; } 

所以问题解决了。 这是gcc 4.6.2中没有实现的另一个功能

您的编译器安装boost所使用的方法是为您的目标支持的,而您的boost编译器的安装不支持您的目标的此功能。

TFM说:

当前系统上可用的硬件线程数(例如,CPU或内核或超线程单元的数量),如果此信息不可用,则为0。

编辑:从头开始,扭转它。

EDIT2:这个特性出现在主干上 ,但在4.6.2中没有:

 ~/tmp/gcc-4.6.2/libstdc++-v3/src> wc -l thread.cc 104 thread.cc ~/tmp/gcc-4.6.2/libstdc++-v3/src> grep concurrency thread.cc | wc -l 0 ~/tmp/gcc-4.6.2/libstdc++-v3> grep -C 2 VERIFY testsuite/30_threads/thread/members/hardware_concurrency.cc // Current implementation punts on this. VERIFY( std::thread::hardware_concurrency() == 0 ); return 0;