📜  门| GATE-CS-2007 |第 58 题

📅  最后修改于: 2021-09-27 06:10:30             🧑  作者: Mango

两个进程 P1 和 P2 需要访问代码的临界区。考虑进程使用的以下同步构造:这里, Wants1 和 Wants2 是共享变量,它们被初始化为 false。下列关于上述结构的陈述哪一项是正确的?v

/* P1 */
while (true) {
  wants1 = true;
  while (wants2 == true);
  /* Critical
    Section */
  wants1=false;
}
/* Remainder section */       


/* P2 */
while (true) {
  wants2 = true;
  while (wants1==true);
  /* Critical
    Section */
  wants2 = false;
}
/* Remainder section */

(A)它不保证互斥。
(B)它不能确保有界等待。
(C)要求进程严格交替进入临界区。
(D)它不防止死锁,但保证互斥。答案: (D)
解释:
有界等待:在一个进程请求进入其临界区之后,在该请求被批准之前,允许其他进程进入其临界区的次数存在界限或限制。

互斥防止同时访问共享资源。这个概念用于带有临界区的并发编程,临界区是一段代码,进程或线程在其中访问共享资源。

解决方案:

两个进程 P1 和 P2 需要访问代码的临界区。这里, Wants1 和 Wants2 是共享变量,初始化为 false。
现在,当 Wants1 和 Wants2 都为真时,进程 p1 和 p2 都进入 while 循环并等待对方完成。这个 while 循环无限期地运行,导致死锁。
现在,假设 P1 处于临界区(这意味着 Wants1=true, Wants2 可以是任何东西,true 或 false)。所以这确保 p2 不会进入临界区,反之亦然。这满足互斥的性质。
这里也满足有界等待条件,因为在进程请求访问临界区后,访问临界区的进程数量是有界限的。

参见 https://www.geeksforgeeks.org/operating-systems-set-13/ 的问题 3

此解决方案由Nitika Bansal 提供
这个问题的测验