clang3.2.1でstd::threadを使う時の注意

個人的メモ書き。
Ubuntu13.04のclang++ version 3.2.1でstd::threadを使うコードを書いた。
[cpp]
#include <iostream>
#include <thread>
void threadFunction(){
for(int i = 0; i < 10000; i++){
std::cout << "thread " << i << std::endl;
}
return;
}
int main(){
std::thread thr(threadFunction);
for(int i = 0; i < 10000; i++){
std::cout << i << std::endl;
}
std::cout << "thread end" << std::endl;
thr.join();
return 0;
}
[/cpp]
で、これを

mattyan@U24E:~$clang++ -g -std=c++11 threadtest.cpp -o threadtest -lpthread

でビルドして実行しようとしたら、

mattyan@U24E:~$ ./threadtest
pure virtual method called
terminate called without an active exception
中止 (コアダンプ)

と出て例外を吐いて落ちた。
ググってみたところどっかしらバグってるらしくて

mattyan@U24E:~$ clang++ -g -std=c++11 threadtest.cpp -o threadtest -lpthread -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8

こうしないといけないらしい。
追記:MinGW gcc 4.7.2はthreadが封鎖されているようだ…boost::thread安定か。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です