我读的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