Sar*_*rah 8 c++ concurrency multithreading mutex monitor
我对 Wiki 上关于监视器的描述感到很困惑,它说:
\n\n\n\n\n监视器由\xc2\xa0互斥体(锁)\xc2\xa0对象和\xc2\xa0条件变量组成。\n A\xc2\xa0条件变量\xc2\xa0基本上是等待特定条件的线程的容器。监视器提供了一种机制,让线程暂时放弃独占访问,以便在重新获得独占访问并恢复其任务之前等待满足某些条件。
\n
我的问题是:这看起来正是cond.wait(locker, [](){return !q.empty();});C++ 中的情况。为什么叫监视器呢?它们是一样的吗?谢谢!
mutex mu;\ncondition_variable cond;\n... \nunique_lock<mutex> locker(mu);\ncond.wait(locker, [](){return !q.empty();});\nRun Code Online (Sandbox Code Playgroud)\n
如果我理解正确的话,监视器是一个具有与其关联的条件变量的对象(以及一个mutex,因为条件变量取决于它),允许线程等待条件变量或通过条件变量通知另一个线程。
在 Java 中,everyObject都是一个监视器。mutex在 C++ 中,您必须通过定义 a和来自行设置它,并在调用 之前condition_variable显式锁定mutex(with ) 。unique_lockwait()
换句话说,监视器是一个概念,而条件变量是一个实现细节。