您的位置:首页 > 其它

临界区域问题

2012-05-21 10:27 127 查看

问题:

教材:operating system concepts [sixth edition]的汉化版,高等教育出版社

原著:Abraham Silberschatz

问题:临界区域问题(7章2小节)

描述:书中对解决两个进程的临界区域问题提出以下这样1个解决方案,并给出

评述,在下关键对评述不理解。

解决方案:让两个进程共享一个 普通变量turn,其初值为0或1。如果

turn == i,那么进程Pi(i为0或1)允许在其临界区内执行。进程Pi的

结构如下:

do{

while (turn != i);

临界区

turn = j;

剩余区

}while(1)

评注说这一方案确保了每一个时刻只有一个进程处于临界区域。然而,它

不满足前进要求(按书就是有空让进的意思),因为它要求进程在临界区中

执行时要严格交替。例如,如果turn == 0且P1就绪要进入其临界区,那么

尽管P0可能在其 剩余区段 ,P1并不能这样做 。 (哪样做啊,是指P1不能

进入自己的 临界区吗?这又怎么可能,不是有turn = j 吗 ,另一个进程肯

定可以检测到这一改变,马上进入相应临界区,根本不会管这个进程在不在

剩余区,又怎么会不能呢?)

解答:

这个关键是要理解文中所说的:

"执行时要严格交替",

也就是说P1不能连续执行两次临界区,

比如,对于P1而言:

while (turn != 1);

临界区

turn = 0; //turn被赋了0后,P0还在长期执行于其剩余区中,可是P1要继续下走

剩余区

while (turn != 1); //这个时刻就是所谓的"P1并不能这样做"的状态

临界区

turn = 0;

剩余区
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: