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(),但我甚至不知道为什么他们会这样做。