首页 > 试题广场 >

用信号量解决“独木桥”问题:同一个方向行人可连续过桥,当某一

[问答题]

用信号量解决“独木桥”问题:同一个方向行人可连续过桥,当某一方向有人过桥时,另一个方向的行人必须等待;当某一方向无人过桥时,另外方向的行人可以过桥。

1)写出记录型信号量的PV操作的定义。

2)本问题中有哪些同步或互斥关系?

3)给出两个方向任一行人通过该独木桥的同步算法。

将独木桥的两个方向分别标记为AB;并用整形变量countAcountB分别表示AB方向上已在独木桥上的行人数,初值为0;再设置三个初值都1的互斥信号量:SA用来实现对countA的互斥访问,SB用来实现对countB的互斥访问,mutex用来实现两个方向的行人对独木桥的互斥使用。则具体描述如下:

Var SA,SB,mutex:semaphore:=1,1,1;

CountA,countB:integer:=0,0:

begin

parbegin

process A: begin

wait(SA);

if(countA=0) then wait(mutex);

countA:=countA+1;

signal(SA);

过独木桥;

wait(SA);

countA:=countA-1;

if (countA=0) then signal(mutex);

signa(SA);

end

process B: begin

wait(SB);

if(countB=0) then wait(mutex);

countB:=countB+1;

signal(SB);

过独木桥;

wait(SB);

countB:=countB-1;

if (countB=0) then signal(mutex);

signa(SB);

end

parend

end

发表于 2017-05-16 23:50:33 回复(0)