一条东西走向的河流上,有一根南北走向的独木桥,要想过河只能通过这根独木桥。只要人们朝着相同的方向过独木桥,同一时刻允许有多个人可以通过。如果在相反的方向上同时有两个人过独木桥则会发生死锁。如果一个人想过河,他必须看当前独木桥的通行情况,若当前的通行方向与他的过河方向相同,则他可以过河,否则他必须等待。
下面的代码用记录型信号量机制的wait操作和signal操作解决了由北向南和由南向北过河人的同步问题。要求将由北向南代码段中编号①~⑤处空缺的内容填写在答题卡上。
var S,N, mutex: semaphore;
Ncount, Scount : integer;
mutex.value= 1;
S.value = 1;
N.value = 1;
Ncount = 0;
Scount= 0;
NorthToSouth:
Begin
Repeat
wait(S);
if( ① ) _②_;
Scount++;
_③_;
通过独木桥过河;
_④_;
Scount-;
if (Scount==0) signal(mutex);
_⑤_;
Until faIse;
End
SorthToNouth:
Begin
Repeat
wait(N);
if (Ncount==0) wait(mutex);
Ncount++;
signal(N);
通过独木桥过河;
wait(N);
Ncount--;
if (Ncount ==0) signal(mutex);
signal(N);
Until false;
End