监视器和条件变量如何相关?

时间:2013-10-02 03:13:41

标签: semaphore monitor condition-variable

wait(mutex);
...
body of F
...
if (next count > 0)
signal(next);
else
signal(mutex);

这是监视器的代码,但我不明白它应该如何与条件变量x相关。

x count++;
if (next count > 0)
signal(next);
else
signal(mutex);
wait(x sem);
x count--;

这里我们有wait()

的代码
if (x count > 0) {
next count++;
signal(x sem);
wait(next);
next count--;
}

这里我们有signal()

的代码

我知道wait()和signal()用于一次向监视器发送1个进程,因此它可以对它们进行排队以确保对共享数据的原子访问,但我不明白代码是如何被认为的工作,因为wait()中的信号互斥在这里是没用的(监视器中的互斥锁已初始化为1)。监视器是否在另一个线程上运行并且是条件变量,监视器使用相同的信号量next和mutex?

我不太确定它是如何工作的,是否有可能存在1个队列,并且每当进程暂停另一个进程被从队列中取出时等等,并且由于我们正在处理信号量,我们可能有x.wait (),x.wait()... x.wait()在没有任何x.signal()的情况下堆积了一段时间?

我不太清楚

if(next count> 0)     信号(下);应该这样做,是为了避免x.wait()堆积?我假设进程调用x.wait()或x.signal(),但我甚至不知道为什么他们会这样做。

0 个答案:

没有答案