考虑过程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想进入临界段。P2不能进入该临界段,因为只有当p1完成执行时,只有P2才能进入(只有满足s1=s2条件)。当任何不想进入关键部分的流程不允许其他有兴趣的流程进入关键部分时,将无法满足进度要求。
参考: http://www.personal.kent.edu/~rmuhamma/OpSystems/Myos/mutualExclu。htm 看见 https://www.geeksforgeeks.org/operating-systems-set-7/
这个解决方案是由 尼蒂卡·班萨尔 这个问题的小测验