多线程 :并行任务串行执行
情景:任务A 执行结束,并行执行任务B和任务C,等待任务B和任务C执行结束了之后,在执行任务D,任务D执行完之后,执行任务A.
bool flagB = false, flagC = false;
std::thread tA([&]()
{
while (true) {
workA();
flagB = false;
flagC = false;
notify_all();
while (!flagB || !flagC);
workD();
}
});
std::thread tB([&]()
{
while (true) {
wait(flagB);// 有条件的等待
workB();
flagB = true;
}
});
std::thread tC([&]()
{
while (true) {
wait(flagC); // 有条件的等待
workC();
flagC = true;
}
});