使用linux上的gcc 4.6和4.7运行简单的std :: thread代码时的核心转储

Der*_*rek 3 c++ multithreading

我不知道我的简单std :: thread代码(下面列出的)有什么问题.在Ubuntu上使用gcc 4.6或最新的4.7时总会崩溃.我用命令编译它g++ -std=c++11 myfile.cppg++ -std=gnu++11 myfile.cpp.

#include <iostream>
#include <thread>

using namespace std;


void func() {
    cout << "hello\n";
}

int main()
{
    std::thread thrd(func);

    thrd.join();
}
Run Code Online (Sandbox Code Playgroud)

核心转储的callstack类似于下面的内容

    #0  0x00007ffff7539445 in raise () from /lib/x86_64-linux-gnu/libc.so.6
    #1  0x00007ffff753cbab in abort () from /lib/x86_64-linux-gnu/libc.so.6
    #2  0x00007ffff7b35b0d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #3  0x00007ffff7b33c16 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #4  0x00007ffff7b33c43 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #5  0x00007ffff7b33e6e in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #6  0x00007ffff7b8829c in std::__throw_system_error(int) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #7  0x00007ffff7b89132 in std::thread::_M_start_thread(std::shared_ptr<std::thread::_Impl_base>) ()
       from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #8  0x000000000040118e in std::thread::thread<void (&)()> (this=0x7fffffffdeb0, __f=
        @0x400e2c: {void (void)} 0x400e2c <func()>) at /usr/include/c++/4.7/thread:133
    #9  0x0000000000400e5b in main () at main2.cpp:13
Run Code Online (Sandbox Code Playgroud)

inf*_*inf 5

您必须使用该-pthread选项进行编译.

g++ -std=c++11 -pthread -o main main.cpp
Run Code Online (Sandbox Code Playgroud)