临界区域问题

问题:

教材: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;
               剩余区


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值