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

📅  最后修改于: 2021-09-26 04:04:24             🧑  作者: 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 处的 V(S),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 循环中。进程 ‘P’ 将不会执行,直到时间进程 ‘Q’ 打印 ’11’ 并通过调用函数V(S) 使 S = 1。

因此,过程 ‘P’ 和 ‘Q’ 将不断重复以给出输出 ‘00110011 …… ‘ 。

观看 GeeksforGeeks 视频说明:

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