Operating system 关于临界截面算法的问题

Operating system 关于临界截面算法的问题,operating-system,critical-section,Operating System,Critical Section,操作系统概念第6版提出了一种实现循环部分的繁琐算法 do{ while (turn != i); critical section trun = j; remainder section } while(1); 注意,Pi是标识符为i的过程,Pj是标识符为j的过程。为了简化问题,本书将i,j限制为0和1,这两个过程构成环境。 问题1是,该算法是否符合进度要求,这是关键部分解决方案的三个要求之一? 在我看来,当Pi处于其剩余部分时,它不能参与Pj是否可以进入关键部分

操作系统概念第6版提出了一种实现循环部分的繁琐算法

do{
  while (turn != i);
    critical section
  trun = j;
    remainder section
} while(1);
注意,Pi是标识符为i的过程,Pj是标识符为j的过程。为了简化问题,本书将i,j限制为0和1,这两个过程构成环境。 问题1是,该算法是否符合进度要求,这是关键部分解决方案的三个要求之一? 在我看来,当Pi处于其剩余部分时,它不能参与Pj是否可以进入关键部分的决策,那么它就受到需求的约束。 或者我对进度要求的理解是完全错误的。所以,因为如果Pi从剩余部分退出,它不能立即进入循环部分,那么这个alg违反了规则

问题2

如果转弯=0且P1已准备好进入 它的关键部分,P1不能做 因此,即使是P0也可能在其 剩余部分

这句话的意思是什么?据我所知,我不明白为什么turn==0和它的余数部分中的p0be可以同时存在。。。
那么这句话错了吗?

假设
turn=0
。P0执行其临界截面并设置
turn=1
。现在,P1必须先执行其临界段,然后P0才能再次执行其临界段。但是,仅仅因为两个线程都有一个关键部分,并不意味着它们想以这种方式交替使用它——事实上,P1可能永远不会轮到它。(在一般情况下,您可以选择。)

因此,基本上问题是线程被强制交替它们的圈数,即使其中一个线程实际上不想无限长时间地进入它的临界区


顺便说一下,你对问题1的回答是正确的。该算法没有使进度条件失效,它使有界等待条件失效。

@Dvaid:谢谢你的友好回答。但是第二个问题呢,我的意思是,turn==0和p0在其余数部分如何同时存在?啊,很抱歉-我想从我对上述问题的描述中可以清楚地看到。如果是P1刚刚完成了关键部分的执行(而不是P0,如我上面的示例所示),那么P1将设置
turn=0
。现在,您似乎假设P0此时必须等待进入其关键部分(在这种情况下,它现在可以进入它,因为
turn==0
),但实际上它可能正在做一些完全不同的事情,这可能需要一些时间。当它最终想要进入它的临界区时,
turn==0
仍然是真的。@David解释得很好。你应该成为一名讲师:)