操作系统 公交车司机与售票员进程协同活动问题 PV操作

使用信号量和PV操作实现公交车上司机进程和售票员进程协同活动

问题:

设公共汽车上,司机和售票员的活动分别是:

司机的活动: 启动车辆,正常行车,到站停车;

售票员的活动:关车门,售票,开车门;

用PV操作实现它们的同步。

问题分析:

在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:

① 售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆。

② 在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。

因此司机启动车辆的动作必须与售票员关车门的动作取得同步,售票员开车门的动作也必须与司机停车取得同步。

在本题中,应设置两个信号量:S1、S2。

S1表示是否允许司机启动汽车,初值为0;

S2表示是否允许售票员开门,其初值为0。

用PV操作解题如下:

semaphore Sl=0;   //司机启动汽车
semaphore S2=0;	//售票员开门
main()
{  
	cobegin
    	driver();
   		busman();
    coend
}
driver()                              
{  
	 while(1) 
	{                                 
       P(S1); //初始S1=0,P(S1)后S1=-1,司机无法启动车辆,需等待售票员执行关门操作(V(S1)),需售票员关好门,唤醒司机,司机才能启动车辆                                
       启动车辆; 
       正常行车;
       到站停车;
       V(S2);  //汽车到站,唤醒售票员开车门
    }           
}
busman()
{
	while(1){
		关车门;
		V(S1);	//售票员已关好车门,执行V(S1),唤醒司机启动车辆
		售票;
		P(S2);	//售票员打开车门,需S2>0时。初始S2=0,售票员不能打开车门,需等司机执行V(S2)操作,唤醒售票员开门,售票员才能打开车门
		开车门;
		乘客上下车;
	}
}
  • 40
    点赞
  • 209
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值