個人的メモ書き。
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安定か。