监视器的等待和信号操作如下使用信号灯实现。在下面的,
- x是一个条件变量,
- 互斥锁是初始化为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(下一个),P(x_sem)
(C) P(下一个),V(x_sem)
(D) P(x_sem),V(x_sem)答案: (B)
解释:
这个问题的测验
如果您在以上帖子中发现任何错误,请在下面发表评论