监视器的等待和信号操作是使用信号量实现的,如下所示。在下面的,
- x 是条件变量,
- mutex 是一个初始化为 1 的信号量,
- x_sem 是一个初始化为 0 的信号量,
- x_count 是等待信号量 x_sem 的进程数,初始为 0,接下来是一个初始化为 0 的信号量,
- next_count 是等待下一个信号量的进程数,最初为 0。
监视器外部可见的每个程序的主体替换为以下内容:
P(mutex); body of procedure if (next_count > 0) V(next); else V(mutex);
每次出现的 x.wait 都替换为以下内容:
x_count = x_count + 1; if (next_count > 0) V(next) else V(mutex); ------------------------------------------------------------ E1; x_count = x_count - 1;
x.signal 的每次出现都替换为以下内容:
if (x_count > 0) { next_count = next_count + 1; ------------------- E2; P(next), next_count = next_count - 1; }
为了正确执行监视器,语句 E1 和 E2 分别是,
(A) P(x_sem), V(下一个)
(B) V(next), P(x_sem)
(C) P(next), V(x_sem)
(D) P(x_sem), V(x_sem)答案:(乙)
解释:
这个问题的测验
如果您发现上面的帖子有任何错误,请在下面评论