有一南北向的单行车道,在车道A、B两端以外一段距离处有减速标志和自动计数系统,A、B两处设有信号灯,信号灯的管理要求如下:绿灯行,红灯停,A、B两端红绿灯同时变换,一方红变绿时另一方绿变红。绿灯保持到同一方向进入的车辆全部驶,AAB段;当AB之间无车辆行驶时,允许到达A端(或B端)的车辆驶,AAB段,但只准某一方的车辆进人;一方最后一辆车进入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; 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); CA:=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(SB); {使信号灯B端绿,A端红}; {车辆从B端驶人AB段}; P(SB); CB:=CB-1; if CB=0 then begin{A、B两端都亮红灯2分钟); V(S) end; end; coend; end;