有一南北向的单行车道,在车道A、B两端以外一段距离处有减速标志和自动计数系统,A、B两处设有信号灯,信号灯的管理要求如下:绿灯行,红灯停,A、B两端红绿灯同时变换,一方红变绿时,另一方绿变红,绿灯保持到同一方向进入的车辆全部驶入AB段;当AB之间无车辆行驶时允许到达A端(或B端)的车辆驶入AB段,但只准某一方的车辆进入,一方最后一辆车进入AB段后,双向亮红灯让车辆全部通过(假设2分钟),然后让已在等待的任何一方车辆驶入。使用PV操作管理.AB路段车辆的行驶。
对共享资源AB路段设一个信号量S,对A、B两端的关系计数器CA和CB设两个信号量SA和SB。 程序如下:
begin S,SA,SB:semaphore; CA,CB:integer; S:=1;SA:=1;SB:=1;
cobegln
PROCESS Car-Ai(i=1,2,……)
begin P(SA); CA:=CA+1; if CA=1 then P(s); V(SA); {使信号灯A端绿,B端红}
P(SA) CA:=CA-1 if CA=0 then begin{A,B两端都亮红灯2分钟}; V(SA); end;
PROCESS Car-Bj(j=1,2,……)
Begin P(SB); CB:=CB+1; if CB=1 then P(S) B(SB); {谁信号灯B端绿,A端红;}; {车辆从B端驶入A端}
P(SB); CB:=CB-1; if CB=0 then Begin{A,B两端都亮红灯2分钟} V(SB); end; end; coend; end;