debian和std :: thread c ++的即时分段错误

时间:2012-08-21 14:49:30

标签: c++ multithreading debian stdthread

在标题中遇到了这个问题..

我有这段代码:

#include <thread>
#include <iostream>

void my_thread_func()
{
    std::cout<<"hello"<<std::endl;
}

int main()
{
    std::thread t(my_thread_func);
    t.join();
}

从网站上的某个地方。编译器选项-pthread -std = gnu ++ 0x (也试过-std = c ++ 0x)我有段错误。一切都在vmBox上的Debian上。我之前已经启动了其他代码,并且他们工作了。突然间,我在所有正在运行的应用程序中使用std :: thread进行了线程段错误。

编辑:这是来自gdb:

(gdb) where
#0  0x00000000 in ?? ()
#1  0x08048dc9 in thread<void (*)()> (this=0xbffff3fc, 
    __f=0x8048b9f <my_thread_func()>) at /usr/include/c++/4.4/thread:129
#2  0x08048bea in main () at ../test.cpp:18

(当我使用std :: thread t(&amp; ClassName :: my_thread_func,ptr)启动更多高级应用时,错误是相同的,但是其他行[thread:133])

我正在通过网络搜索,但我没有发现任何合适的内容。

2 个答案:

答案 0 :(得分:7)

使用g++ -std=c++0x -lpthread进行编译。请注意l之前的pthread

答案 1 :(得分:1)

Gcc 4.4对C ++ 11功能的支持非常有限,特别是在线程领域。由于库没有准备好,我在gcc 4.4和4.5中看到了许多线程相关的崩溃。

我非常有信心它是一个编译器“bug”*并建议你升级到至少gcc 4.7。

*“bug”因为gcc 4.4从未声称完全支持std::thread,因此您无法真正期望它能够正常工作。

编辑:我想到的一件事是,有时静态链接到glibc和/或libpthread在旧版本中不起作用。