有一南北向的单行车道,在车道A、B两端以外一段距离处有减速标志和自动计数系统,A、B两处设有信号灯,信号灯的管理要求如下:绿灯行,红灯停,A、B两端红绿灯同时变换,一方红变绿时另一方绿变红。绿灯保持到同一方向进入的车辆全部驶入AB段,当AB之间无车辆行驶时

admin2013-03-18  25

问题 有一南北向的单行车道,在车道A、B两端以外一段距离处有减速标志和自动计数系统,A、B两处设有信号灯,信号灯的管理要求如下:绿灯行,红灯停,A、B两端红绿灯同时变换,一方红变绿时另一方绿变红。绿灯保持到同一方向进入的车辆全部驶入AB段,当AB之间无车辆行驶时,允许到达A端(或B端)的车辆驶入AB段,但只准某一方向的车辆进入;当一方最后一辆车进入AB段后,双向亮红灯让车辆全部通过(假设2min),然后让己在等待的任何一方向的车辆驶入。试用PV操作管理AB路段车辆的行驶。

选项

答案本题可参考读者写者问题,相当于两组读者使用一个共享文件的互斥问题。对共享资源AB路段设一个信号量s,对A、B两端的共享计数器ca和cb应设两个信号量sa和sb。所设计的程序段如下: Begin s,sa,ab:semaphore; ca,cb:integer; s:=1; sa:=1; sb:=1; Cobegin Process car-ai; (i=1, 2,…} Begin p(sa); Ca:=ca+1; if ca=1 then p(s); V(sa); {使信号灯A端绿,B端红,车辆从A端驶入AB段} p(sa); ea:=ca-1; if ca=0 then Begin {A,B两端都亮红灯2分钟} V(s); End End process car-bj; {j=1,2……} Begin p(sb); cb:=cb+1; if cb=1 then p(s); V(s); {使信号灯B端绿,A端红;车辆从B端驶入AB段} p(sb); cb:=cb-1; if cb=0 then Begin {A,B两端都亮红灯2分钟} V(s); End End Coend End

解析
转载请注明原文地址:https://kaotiyun.com/show/qVsp777K
0

最新回复(0)