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

📅  最后修改于: 2021-06-28 20:17:26             🧑  作者: 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点插入

以下哪项将确保输出字符串永远不包含格式为01 ^ n0或10 ^ n1的子字符串,其中n为奇数?
(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,S和T处的V(S)最初为1
(C) W处的P(S),X处的V(S),Y处的P(S),Z,S处的V(S)最初为1
(D)在W处的V(S),在X处的V(T),在Y处的P(S),在Z,S和T处的P(T)最初为1答案: (C)
说明: 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时,过程“ P”才会执行。

因此,过程“ P”和“ Q”将继续重复以给出输出“ 00110011……”。

如果您在以上文章中发现任何错误,请在下面发表评论。
这个问题的测验