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

📅  最后修改于: 2021-09-25 04:36:05             🧑  作者: 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答案:(乙)
说明: 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 是正确的选择。

观看 GeeksforGeeks 视频说明:

如果您发现上面的帖子有任何错误,请在下面发表评论。这个问题的测验