我讀的C++ 11個線程的一些文獻,並試圖下面的代碼:混淆C++線程行爲
#include "iostream"
#include "thread"
using namespace std;
class background_task{
int data;
int flag;
public:
background_task(int val):data(val),flag(data%2){}
void operator()(void){
int count = 0;
while(count < 100)
{
if(flag)
cout <<'\n'<<data++;
else
cout <<'\n'<<data--;
count++;
}
}
};
int main(int argc , char** argv){
std::thread T1 {background_task(2)};
std::thread T2 {background_task(3)};
T1.join();
T2.join();
return 0;
}
輸出無厘頭因爲我運行兩個線程所以每個應當印幾乎在一起,並沒有等待一個線程完成開始。相反,每個線程完成,然後下一個線程開始,就像同步的方式。我在這裏錯過了什麼?
不,你不會錯過任何。這只是一個巧合。嘗試多次運行您的代碼並觀察。 – user3286661