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

📅  最后修改于: 2021-06-28 23:40:16             🧑  作者: Mango

P1和P2这两个进程需要访问代码的关键部分。考虑一下进程使用的以下同步结构:这里,旺旺1和旺旺2是共享变量,它们被初始化为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这两个进程需要访问代码的关键部分。在这里,旺旺1和旺旺2是共享变量,它们被初始化为false。
现在,当want1和want2都变为true时,进程p1和p2都进入while循环并等待彼此完成。该while循环无限期运行,从而导致死锁。
现在,假设P1处于关键部分(这意味着旺旺1 =真,旺旺2可以是真或假的任何东西)。因此,这确保了p2不会进入关键部分,反之亦然。这满足了互斥的性质。
这里也满足了有条件的等待条件,因为在进程请求访问关键部分之后,可以访问关键部分的进程数量是有一定限制的。

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

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