mutex m;
char i;
thread t([&m,&i]()
{
for(;true;m.unlock())
{
m.lock();
cout<<"输入:";
cin>>i;
if(i=='t')
cout<<"线程"<<i<<"执行中"<<endl;
}
}),u([&m,&i]()
{
for(;true;m.unlock())
{
m.lock();
cout<<"输入:";
cin>>i;
if(i=='u')
cout<<"线程"<<i<<"执行中"<<endl;
}
}),v([&m,&i]()
{
for(;true;m.unlock())
{
m.lock();
cout<<"输入:";
cin>>i;
if(i=='v')
cout<<"线程"<<i<<"执行中"<<endl;
}
});
v.join();//试过了交换join顺序也没用
u.join();
t.join();
执行结果为什么只有一个线程正常,而且不管有多少个线程总是最后一个定义的才能正常输出
C++11 库看起来很好用啊。
mutex m;
char i;
thread t([&m, &i]()
{
for (; true; )
{
m.lock();
cout << "t running 输入:";
cin >> i;
if (i == 't')
cout << "线程" << i << "执行中" << endl;
else
cout << "t running loop end." << endl;
m.unlock();
Sleep(10);
}
}), u([&m, &i]()
{
for (; true;)
{
m.lock();
cout << "u running 输入:";
cin >> i;
if (i == 'u')
cout << "线程" << i << "执行中" << endl;
else
cout << "u running loop end." << endl;
m.unlock();
Sleep(10);
}
}), v([&m, &i]()
{
for (; true;)
{
m.lock();
cout << "v running 输入:";
cin >> i;
if (i == 'v')
cout << "线程" << i << "执行中" << endl;
else
cout << "v running loop end." << endl;
m.unlock();
Sleep(10);
}
});
v.join();//试过了交换join顺序也没用
u.join();
t.join();
打印如下:
t running 输入:u
t running loop end.
u running 输入:v
u running loop end.
v running 输入:t
v running loop end.
t running 输入:t
线程t执行中
u running 输入:x
u running loop end.
v running 输入:d
v running loop end.
t running 输入: