我不知道为什么,但包括c + + 11到我的项目在eclipse和新的function,如std :: array <>工作后,它突然不会工作,当我使用std ::线程。
这里是我试图运行的例子:
#include <iostream> #include <string> #include <thread> void print_message_function(const std::string& msg); int main() { std::string message1 = "Thread 1"; std::string message2 = "Thread 2"; std::thread thread1(print_message_function, message1); std::thread thread2(print_message_function, message2); thread1.join(); thread2.join(); } void print_message_function(const std::string& msg) { std::cout << msg << std::endl; }
编译时没有错误,运行时没有错误(没有输出太..),但是当使用debugging工具时,它在这一行上崩溃:
std::thread thread1(print_message_function, message1);
这是崩溃时的堆栈:
Thread [1] (Suspended: Signal 'SIGSEGV' received. Description: Segmentation fault.) 5 _dl_fixup() 0x0000003d6920df7c 4 _dl_runtime_resolve() 0x0000003d69214625 3 std::thread::_M_start_thread() 0x0000003d762b65a7 2 std::thread::thread<void (&)(std::string const&), std::string&>() /usr/include/c++/4.4.4/thread:133 0x0000000000402268 1 main() /.../Main.cpp:12 0x0000000000401e8d
为什么发生这种情况?
您需要在编译命令中使用-pthread
链接到pthreads库。