考虑进程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)互斥与进步答案: (A)
解释:
互斥:
一种确保如果一个进程正在使用共享的可修改数据的方式,则其他进程将被排除在做同一件事之外。当一个进程执行共享变量时,所有希望同时执行共享变量的其他进程应保持等待状态;当该进程完成执行共享变量时,其中一个进程在等待;当该进程完成执行共享变量时,应允许等待执行共享进程的进程之一继续进行。以这种方式,执行共享数据(变量)的每个进程都将所有其他进程排除在外。这称为互斥。
进度要求:
如果关键部分中没有正在执行的进程,并且有一些进程希望进入其关键部分,则不能无限期推迟下一步选择将进入关键部分的进程。
解决方案:
可以很容易地观察到上述解决方案满足了互斥要求,只有当S1不等于S2时P1才可以进入临界区,只有当S1等于S2时P2才可以进入临界区。但是,这里的进度要求没有得到满足。假设当s1 = 1和s2 = 0且过程p1不希望进入临界区而p2要进入临界区时。仅当p1完成执行后,p2才能进入关键区域,然后只有p2可以进入(然后满足s1 = s2条件)。当不希望进入关键部分的任何流程不允许其他感兴趣的过程进入关键部分时,进度将无法满足。
参考 :
http://www.personal.kent.edu/~rmuhamma/OpSystems/Myos/mutualExclu.htm
参见https://www.geeksforgeeks.org/operating-systems-set-7/
该解决方案由Nitika Bansal提供
这个问题的测验