-公交车问题

来源:互联网 发布:ubuntu 16 openjdk 编辑:程序博客网 时间:2024/04/28 01:41

问题描述:设公交车上,司机和售票员的活动分别如下:

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

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

               在汽车不断地到站,停车,行驶过程中,这两个活动有什么同步关系?用信号量和pv操作实现它们的同步。

问题分析:在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。因此,司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。应设置两个信号量:S1、S2;

                S1表示是否允许司机启动汽车(其初值为0)

                S2表示是否允许售票员开车门(其初值为0)

用pv原语描述如下:

                 the PV code using pascal

                 var S1,S2:semaphore;

                 S1=0;S2=0;

 

                 cobegin

                 Procedure driver

                 begin

                 while(TURE)

                 begin

                 P(S1);

                 start;

                 driving;

                 stop;

                 V(S2);

                 end

                 end

 

                 Procedure conductor

                 begin

                 while(TURE)

                 begin

                 关车门;

                 V(S1);

                 售票;

                 P(S2);

                 开车门;

                 上下乘客;

                 end

                 coend

原创粉丝点击