C++11 库看起来很好用啊。
- 三个线程一个在接收输入,另外两个在等待解锁
- 锁很不错,只有一个线程在工作。
- 是因为那个工作线程一直在处于CPU上,而另外两个线程在睡觉,所以当那个工作线程让出来CPU后,另外两个没有抢上,又被工作线程抢去了。 代码修改如下,让 线程 u v t 都休眠 10ms,那两个线程就工作了。
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 输入: