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提供
这个问题的测验