der*_*khh 23 linux multithreading boost c++11
问题本身的描述非常简单.我正在测试C++ 11和boost :: thread库中std :: thread库的差异.
这些的输出:
#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;
}
Run Code Online (Sandbox Code Playgroud)
给我不同的结果:
0
4
Run Code Online (Sandbox Code Playgroud)
这是为什么?
PS:gcc包的版本是4.6.2-1.fc16(x86_64).我正在使用
g++ test.cc -Wall -std=c++0x -lboost_thread-mt -lpthread
Run Code Online (Sandbox Code Playgroud)
der*_*khh 20
在查看/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; }
Run Code Online (Sandbox Code Playgroud)
所以问题解决了.这只是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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6894 次 |
| 最近记录: |