来自C ++ 11关于探测器和反应堆的书:探测器检测到某些东西然后要求反应堆完成这项工作:
603979776
另一方面,反应堆:
// Detector:
std::condition_variable cv;
std::mutex m;
bool flag(false);
// ... detect event
{
std::lock_guard<std::mutex> g(m);
flag = true;
}
cv.notify_one();
我的问题是,如果反应堆首先被触发并在互斥锁 m 上获得锁定,那么它是否会死锁,因为反应堆将在cv.wait上被阻塞并且探测器可以&#39 ; t获取 m 的锁定?
答案 0 :(得分:1)
这是std::condition_variable
的常用模式和用途。
函数std::condition_variable::wait
:
unique_lock
传递给它。unique_lock
。unique_lock
再次锁定,然后退出。希望你的书继续说明虚假的醒来。编辑:...对于您正在使用的谓词形式,不是关注!