【正确答案】
【答案解析】本题可参考读者写者问题,相当于两组读者使用一个共享文件的互斥问题。对共享资源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