条件变量可用于向其他线程发出信号表明发生了某些事情:
mutex m;
condition_variable cv;
thread t1([&cv]{
// processing
...
cv.notify_one();
});
...
unique_lock<std::mutex> lck(m);
cv.wait(lck);
但是正如你所看到的,在我们等待被通知之前,有一个机会窗口,线程处理完成并且通知正在传递,所以我们将永远等待。
在这种情况下,一个常见的解决方案是使用标志:
mutex m;
condition_variable cv;
bool done = false;
thread t1([&cv,&done]{
// processing
...
done = true;
cv.notify_one();
});
...
unique_lock<std::mutex> lck(m);
cv.wait(lck, [&done]{return done;});
使用标志是使用 a 的常用方法condition_variable
,还是我的解释错误?