1
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)。监视器是否在不同的线程上运行,条件变量和监视器是否使用相同的信号量和互斥锁?

我不太确定它是如何工作的,是否有可能有 1 个队列,每当一个进程暂停时,另一个进程就会从队列中取出等等,因为我们正在处理信号量,所以我们可以使用 x.wait(), x.wait() ... x.wait() 在没有任何 x.signal() 的情况下堆积了一段时间?我不太确定是什么

如果(下一个计数> 0)信号(下一个);应该做的,是为了避免 x.wait() 堆积吗?我假设进程调用 x.wait() 或 x.signal(),但我什至不知道他们为什么会这样做。

4

0 回答 0