监视器和条件变量,它们相同吗?

Sar*_*rah 8 c++ concurrency multithreading mutex monitor

我对 Wiki 上关于监视器的描述感到很困惑,它说:

\n\n
\n

监视器由\xc2\xa0互斥体(锁)\xc2\xa0对象和\xc2\xa0条件变量组成。\n A\xc2\xa0条件变量\xc2\xa0基本上是等待特定条件的线程的容器。监视器提供了一种机制,让线程暂时放弃独占访问,以便在重新获得独占访问并恢复其任务之前等待满足某些条件。

\n
\n\n

我的问题是:这看起来正是cond.wait(locker, [](){return !q.empty();});C++ 中的情况。为什么叫监视器呢?它们是一样的吗?谢谢!

\n\n
mutex mu;\ncondition_variable cond;\n...        \nunique_lock<mutex> locker(mu);\ncond.wait(locker, [](){return !q.empty();});\n
Run Code Online (Sandbox Code Playgroud)\n

cel*_*rel 5

如果我理解正确的话,监视器是一个具有与其关联的条件变量的对象(以及一个mutex,因为条件变量取决于它),允许线程等待条件变量或通过条件变量通知另一个线程。

在 Java 中,everyObject都是一个监视器。mutex在 C++ 中,您必须通过定义 a和来自行设置它,并在调用 之前condition_variable显式锁定mutex(with ) 。unique_lockwait()

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