以前にBoostを用いてスレッドを立てましたが,これまたBoostのライブラリを使って簡単にスレッドセーフを実現する方法をメモしておきます。
#include <boost/thread.hpp>
#include <boost/bind.hpp>
boost::mutex mtx;
void hoge1(int &a){
boost::mutex::scoped_lock lock(mtx);
for(int n=0; n<3; ++n){
std::cout << "hoge1:" << a+n << std::endl;
}
std::cout << std::endl;
return;
}
void hoge2(int &b){
boost::mutex::scoped_lock lock(mtx);
for(int n=0; n<3; ++n){
std::cout << "hoge2:" << b+n << std::endl;
}
std::cout << std::endl;
return;
}
int main(int argc, char **argv){
int c = 0;
boost::thread thr1(boost::bind(&hoge1, c));
boost::thread thr2(boost::bind(&hoge2, c));
thr1.join();
thr2.join();
return 0;
}
これを実行するとhoge1:0
hoge1:1
hoge1:2
hoge2:0
hoge2:1
hoge2:2
という感じになってくれると思います.