实现同步控制和互斥控制的代码例子

用PV原语实现进程的互斥:
  例1    生产围棋的工人不小心把相等数量的黑子和白子混装载一个箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,功能如下:   
  (1)进程A专门拣黑子,进程B专门拣白子;    
  (2)每个进程每次只拣一个子,当一个进程在拣子时不允许另一个进程去拣子; 
   实现: 
     begin   
       s:semaphore;  
       s:=1;     
       cobegin     
       process A    
        begin    
         L1: P(s);      
          拣黑子;      
          V(s);      
          goto L1;     
        end;      
      process B     
        begin    
        L2:P(s);      
           拣白子;      
           V(s);      
           goto L2;     
        end;    
       coend;  
      end; 
  例2    某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,厅外的购票者可立即进入,否则需要在外面等待。每个购票者可看成一个进程。 
   实现: 
     begin     
     s:semaphore;   
     s:=20;   
     cobegin    
      process PI(I=1,2,……)     
       begin P(s);      
       进入售票厅;      
       购票;      
       退出;      
       V(s);     
      end;    
     coend

用PV原语实现进程的同步:  

例3   
 在例1的基础之上再添加一个功能:    
 (3)当一个进程拣了一个棋子(黑子或白子)以后,必让另一个进程拣一个棋子(黑子或白子)。  
  实现:  
   begin   
    s1,s2:semaphore;  
     s1:=1;s2:=0;   
     cobegin 
      process A    
     begin    
     L1: P(s1);     
      拣黑子;     
      V(s2);     
      goto L1;    
     end;        
    process B    
     begin   
      L2:P(s2);    
      拣白子;    
         V(s1);    
        goto L2;    
      end;   
     coend;   
    end;   
 例4    设在公共汽车上,司机和售票员的活动分别是:司机:启动车辆,正常行车,到站停车。售票员:上乘客,关车门,售票,开车门,下乘客。用PV操作对其控制。 
 实现:    
 begin 
 stop ,run:semaphore  
  stop:=0;run:=0;   
  cobegin     
   driver: begin   
   L1: P(run);     
    启动车辆;     
    正常行车;    
    到站停车;     
     V(stop);     
     goto  L1;    
   end;     
     conductor:begin    
     L2:上乘客;    
       关车门;
V(run);    
 售票;     
 P(stop);     
  开车门;     
  下乘客;     
 goto L2;   
 end;   
coend;   
 end;
   
注:本文来自https://wenku.baidu.com/view/29f0e200a6c30c2259019ee9.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值