有一南北向的单行车道,在车道A、B两端以外一段距离处有减速标志和自动计数系统,A、B两处设有信号灯,信号灯的管理要求如下:绿灯行,红灯停,A、B两端红绿灯同时变换,一方红变绿时另一方绿变红。绿灯保持到同一方向进入的车辆全部驶入AB段,当AB之间无车辆行驶时,允许到达A端(或B端)的车辆驶入AB段,但只准某一方向的车辆进入;当一方最后一辆车进入AB段后,双向亮红灯让车辆全部通过(假设2min),然后让己在等待的任何一方向的车辆驶入。试用PV操作管理AB路段车辆的行驶。
答案说明:本题目答案来自网络整理或转载,最终答案请以官网为准。
答 案:本题可参考读者写者问题相当于两组读者使用一个共享文件的互斥问题。对共享资源AB路段设一个信号量s对A、B两端的共享计数器ca和cb应设两个信号量sa和sb。所设计的程序段如下: Begin ssaab:semaphore; cacb: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 {AB两端都亮红灯2分钟} V(s); End End process car-bj; {j=12……} 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 {AB两端都亮红灯2分钟} V(s); End End Coend End
本题可参考读者写者问题,相当于两组读者使用一个共享文件的互斥问题。对共享资源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