假设我们要使用二进制信号S和T同步两个并发的进程P和Q。下面显示了进程P和Q的代码。
Process P:
while (1) {
W:
print '0';
print '0';
X:
}
Process Q:
while (1) {
Y:
print '1';
print '1';
Z:
}
只能将同步语句插入点W,X,Y和Z。
以下哪项将始终导致输出以’001100110011’开头?
(A) W处的P(S),X处的V(S),Y处的P(T),Z,S和T处的V(T)最初为1
(B) W处的P(S),X处的V(T),Y处的P(T),Z处的V(S),S最初为1,T最初为0
(C) W处的P(S),X处的V(T),Y处的P(T),Z,S和T处的V(S)最初为1
(D) W处的P(S),X处的V(S),Y处的P(T),Z处的V(T),S最初为1,T最初为0答案: (B)
说明: P(S)表示等待信号量“ S”,而V(S)表示等待信号量“ S”。
Wait(S)
{
while (i <= 0)
--S;
}
Signal(S)
{
S++;
}
最初,我们假设S = 1和T = 0以支持过程P和Q中的互斥。
由于S = 1,将仅执行进程P,并且wait(S)将减少S的值。因此,S = 0。
同时,在过程Q中,T的值=0。因此,在过程Q中,控制将停留在while循环中,直到时间P打印00并通过调用函数V(T)来增加T的值。
当控件处于过程Q中时,信号量S = 0,过程P将停留在while循环中,并且直到过程Q打印11并通过调用函数V(S)使S = 1的时间时才执行。
整个过程将重复进行,以给出输出00 11 00 11…。
因此,B是正确的选择。
如果您在以上文章中发现任何错误,请在下面发表评论。这个问题的测验