ゆとりーなの日記

日記的な事を書いて行くと思はれる

g++でC++11のスレッドを使うとなんか起きた

 C++から入ったstd::threadで取り敢えずコードを書いてみる訳です。

#include <thread>

struct hoge {
  void operator ()() const {}
};

int main() {
  hoge h;
  std::thread th(h);
  th.join();
  return 0;
}

これがUbuntuのg++4.6.1だと実行時エラー起こすんですね。std::system_errorが投げられて"Operation not permitted"だそうです。
 正解はコンパイルオプションに-pthreadを付けるといいみたいで、

g++ -std=c++0x -pthread hoge.cc

上のコードをこれでコンパイルしてやると謎の実行時エラーは起きなくなるようです。