📜  门|门CS 2010 |问题 23

📅  最后修改于: 2021-09-24 05:58:33             🧑  作者: Mango

考虑进程 P1 和 P2 在需要时访问其临界区所使用的方法,如下所示。共享布尔变量 S1 和 S2 的初始值是随机分配的。

Method Used by P1
while (S1 == S2) ;
Critica1 Section
S1 = S2;

Method Used by P2
while (S1 != S2) ;
Critica1 Section
S2 = not (S1);

以下哪一项陈述描述了所达到的属性?
(A)互斥而不进步
(B)进步但不相互排斥
(C)既不互斥也不进步
(D)互斥与进步答案:(一)
解释:
互斥:
一种确保如果一个进程正在使用共享的可修改数据,其他进程将被排除在做同样的事情之外的方法。当一个进程执行共享变量时,所有其他希望同时执行的进程应该保持等待;当该进程完成执行共享变量时,其中一个进程正在等待;当该进程已完成执行共享变量时,应允许等待执行此操作的进程之一继续执行。以这种方式,执行共享数据(变量)的每个进程都将所有其他进程排除在外同时这样做。这称为互斥。

进度要求:
如果在其临界区中没有进程正在执行,并且存在一些希望进入其临界区的进程,那么接下来将进入临界区的进程的选择不能无限期地推迟。

解决方案:

不难看出,上述方案满足互斥要求,只有S1不等于S2,P1才能进入临界区,只有S1等于S2,P2才能进入临界区。但这里的 Progress Requirement 并没有得到满足。假设当 s1=1 且 s2=0 时,进程 p1 不想进入临界区而 p2 想进入临界区。 P2在此不能进入临界区,因为只有在p1执行完后,才只有p2可以进入(那么只有s1=s2条件成立)。当任何不想进入临界区的进程不允许其他感兴趣的进程进入临界区时,进度将不会得到满足。

参考 :
http://www.personal.kent.edu/~rmuhamma/OpSystems/Myos/mutualExclu.htm
见 https://www.geeksforgeeks.org/operating-systems-set-7/

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