我正在使用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和thrd3開始後thrd1所完成運行。
在thrd1結束之前是否有任何方法讓thrd2和thrd3運行?
請注意'int theardID = id ++;'是一個競態條件,因爲您有兩個線程同時修改單個變量。它或者需要是原子的,或者是受鎖的保護。 (或者將線程的ID傳遞給構造函數。) – GManNickG