我对Wiki上的监视器描述感到很困惑,其中说:
监视器由互斥锁(锁定)对象和条件变量组成。 条件变量基本上是线程的容器 在某种条件下等待。监视器提供了一种机制 线程暂时放弃独占访问以等待 在重新获得独家访问权限之前要满足的一些条件 恢复他们的任务。
我的问题是:这似乎正是cond.wait(locker, [](){return !q.empty();});
在C ++中的作用。为什么这叫做监视器?它们是一样的吗?谢谢!
mutex mu;
condition_variable cond;
...
unique_lock<mutex> locker(mu);
cond.wait(locker, [](){return !q.empty();});
答案 0 :(得分:1)
如果我理解正确,监视器是一个具有条件变量的对象(和互斥,作为条件变量取决于那个),允许线程在条件变量上等待或通过条件变量通知另一个线程。
在Java中,每个Object
都是一个监视器。在C ++中,您必须通过定义mutex
和condition_variable
来自行设置,并在致电mutex
之前明确锁定unique_lock
(使用wait()
)
换句话说, monitor 是一个概念,而条件变量是一个实现细节。