监视器和条件变量,它们是一样的吗?

时间:2015-07-10 02:56:45

标签: c++ multithreading concurrency mutex monitor

我对Wiki上的监视器描述感到很困惑,其中说:

  

监视器由互斥锁(锁定)对象和条件变量组成。   条件变量基本上是线程的容器   在某种条件下等待。监视器提供了一种机制   线程暂时放弃独占访问以等待   在重新获得独家访问权限之前要满足的一些条件   恢复他们的任务。

我的问题是:这似乎正是cond.wait(locker, [](){return !q.empty();});在C ++中的作用。为什么这叫做监视器?它们是一样的吗?谢谢!

mutex mu;
condition_variable cond;
...        
unique_lock<mutex> locker(mu);
cond.wait(locker, [](){return !q.empty();});

1 个答案:

答案 0 :(得分:1)

如果我理解正确,监视器是一个具有条件变量的对象(和互斥,作为条件变量取决于那个),允许线程在条件变量上等待或通过条件变量通知另一个线程。

在Java中,每个Object都是一个监视器。在C ++中,您必须通过定义mutexcondition_variable来自行设置,并在致电mutex之前明确锁定unique_lock(使用wait()

换句话说, monitor 是一个概念,而条件变量是一个实现细节。