操作系统概念第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,
如果 turn == 0 并且 P1 准备进入其临界区,P1 不能这样做,即使 P0 可能在其剩余部分
这句话的含义是什么?据我所知,我无法理解为什么 turn == 0 和 p0 在其剩余部分可以同时存在......
那么这个说法有错吗?