【问题标题】:monitor and conditional variable, are they the same?监视器和条件变量,它们是一样的吗?
【发布时间】:2015-09-28 16:03:20
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ multithreading concurrency mutex monitor


    【解决方案1】:

    如果我理解正确的话,monitor 是一个对象,它有一个与之关联的 条件变量(以及一个 mutex,作为条件变量取决于此),允许线程在条件变量上等待或通过条件变量通知另一个线程。

    在 Java 中,每个 Object 都是一个监视器。在 C++ 中,您必须自己设置它,方法是定义 mutexcondition_variable,并在调用 wait() 之前显式锁定 mutex(使用 unique_lock)。

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

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2019-04-18
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2011-03-15
      • 1970-01-01
      相关资源
      最近更新 更多