为什么这个简单的std :: thread示例不起作用?

Sté*_*ane 44 c++ multithreading c++11

尝试编译以下示例g++ -std=gnu++0x t1.cpp,g++ -std=c++0x t1.cpp但这两个结果都导致示例中止.

$ ./a.out 
terminate called after throwing an instance of 'std::system_error'
  what():  
Aborted
Run Code Online (Sandbox Code Playgroud)

这是样本:

#include <thread>
#include <iostream>

void doSomeWork( void )
{
    std::cout << "hello from thread..." << std::endl;
    return;
}

int main( int argc, char *argv[] )
{
    std::thread t( doSomeWork );
    t.join();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu 11.04上尝试这个:

$ g++ --version
g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
Run Code Online (Sandbox Code Playgroud)

谁知道我错过了什么?

rub*_*nvb 45

你必须加入join std::thread,就像你必须加入一样pthreads.

int main( int argc, char *argv[] )
{
    std::thread t( doSomeWork );
    t.join();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

更新: 这个Debian错误报告指出了解决方案:添加-pthread到命令行.这很可能是一种解决方法,直到std::thread代码稳定并且g ++将该库拉到应该(或者总是为C++)的时候.

  • 谢谢,诀窍是将-pthread添加到g ++. (4认同)
  • 我添加了`-pthread`但得到了同样的错误.我在Ubuntu 11.10上使用GCC 4.6 (2认同)

小智 13

请在编译期间使用pthread库:g ++ -lpthread.