这会是一个僵局吗?

时间:2018-01-26 21:25:31

标签: c++ concurrency

来自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 的锁定?

1 个答案:

答案 0 :(得分:1)

这是std::condition_variable的常用模式和用途。

函数std::condition_variable::wait

  • 预计将锁定 unique_lock传递给它。
  • 在等待之前立即解锁 unique_lock
  • 当功能“唤醒”时,unique_lock 再次锁定,然后退出。

希望你的书继续说明虚假的醒来。编辑:...对于您正在使用的谓词形式,不是关注