【正确答案】司机活动和售票员活动如图所示。
[*]
在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后起动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。因此,司机起动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车的动作取得同步。应设置两个信号量。
Semaphore S1=0; //S1表示是否允许司机起动汽车,其初值为0
Semaphore S2=0; //S2表示是否允许售票员开门,其初值为0
Procedure driver{
While(true){
P(S1);
Start;
Driving;
Stop;
V(S2);
}
}
Procedure Conductor{
While(true){
Close the door;
V(S1);
Sell the ticket;
P(S2);
Open the door;
Passengers up and down;
}
}