操作系统: 司机与售票员的进程同步问题

司机与售票员的进程同步问题

     在公共汽车上,司机和售票员的工作流程如图所示。

     为保证乘客的安全,司机和售票员应 密切配合协调工作。

     请用信号量来实现司机与售票员之间的同步。

     司机 启动车辆 正常行车 到站停车

     售票员 关车门 售票 开车门

     图 司机和售票员工作流程图

在这个问题中没有资源的抢夺,所以无互斥信号量。

司机和售票员是同步关系,司机需要接收门是否关好的信号量,而售票员需要接收车是否到站的信号量。
活动顺序:关车门->启动车辆->售票->到站停车->开车门
初始状态为:停车且门未关。
流程:售票员给司机关门的信号,司机收到后开始正常行驶车辆,到站时由司机给售票员停车的信号。
解:设关门信号量为door=0,停车信号量为stop=0。

 


void Driver(){
     while(1){
       wait(door);//司机等待关门信号,一旦获取信号,则启动车辆
       启动车辆;
       正常行车;
       到站停车;
       signal(stop); //司机给售票员停车的信号
     }
}
void Busman(){
     while(1){
       关车门;
       signal(door);  //售票员给司机已经关门的信号
       售票;
       wait(stop);    //等待停车信号,一旦停车,则开门
       开车门;
} 












发布了736 篇原创文章 · 获赞 123 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/S_999999/article/details/103676543