📜  门| GATE-CS-2003 |第80章

📅  最后修改于: 2021-06-29 18:50:58             🧑  作者: Mango

假设我们要使用二进制信号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是正确的选择。
如果您在以上文章中发现任何错误,请在下面发表评论。这个问题的测验