4

この問題が発生しました-タイトルで..

私はこのコードを持っています:

#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 も試しました) と segfault があります。すべてが vmBox の Debian にあります。以前に他のコードを起動しましたが、それらは機能しました。突然、すべての動作中のアプリで std::thread を使用してスレッドに segfault が発生しました。

編集:これは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(&ClassName::my_thread_func,ptr) で起動すると、エラーは同じですが、他の行 [thread:133])

ウェブで検索しましたが、適切なものが見つかりませんでした。

4

2 に答える 2

1

C ++11機能のGcc4.4サポートは、特にスレッド領域で非常に制限されています。ライブラリの準備ができていないために、gcc4.4および4.5でスレッド関連のクラッシュがたくさん発生しました。

これはコンパイラの「バグ」*であると確信しており、少なくともgcc4.7にアップグレードすることをお勧めします。

*「バグ」。gcc4.4が完全にサポートしているとは主張してstd::threadいないため、実際に機能することは期待できません。

編集:私の頭に浮かんだことの1つは、glibcやlibpthreadへの静的リンクがこれらの古いバージョンでは機能しない場合があるということです。

于 2012-08-21T15:11:24.357 に答える