私はboost :: threadを使用していますが、いくつか問題があります。いくつかのブーストスレッドの質問C++
事があり、私は最後の参加仕上げ前のスレッドに参加することができます任意の方法はありますか。例えば 、この単純な例では
int id=1;
void temp()
{
int theardID = id++;
for(int i=0;i<3;i++)
{
cout<<theardID << " : "<<i<<endl;
boost::this_thread::sleep(boost::posix_time::millisec(100));
}
}
int main(void)
{
boost::thread thrd1(temp);
thrd1.join();
boost::thread thrd2(temp);
boost::thread thrd3(temp);
thrd2.join();
thrd3.join();
return 0;
}
、出力の順序は次のようになります。
1:0
1:1
1:2
2:0
3:0
3:1
2:1
2:2
3:2
上記の例として、我々はthrd2ことを見つける見ることができるとthrd1終了後に実行を開始thrd3 。
はthrd2をできるようにしてthrd1仕上げの前に実行thrd3任意の方法はありますか?
'int型theardID = ID ++があることに注意してください。あなたが一度に単一の変数を変更する2つのスレッドを持っているように、'、競合状態です。アトミックであるか、ロックによって保護されている必要があります。 (または、スレッドのIDをコンストラクタに渡します。) – GManNickG