问答题 有座东西方向架设、可双向通行的单车道简易桥,最大载重负荷为4辆汽车。请定义合适的信号量,正确使用P、V操作,给出任一车辆通过该简易桥的管理算法,解答中请回答下列问题:

问答题 临界区管理原则是什么?
【正确答案】临界区管理原则有:(a)一次只能一个进程进入临界区;(b)等待进入临界区的时间必须是有限的;(c)临界区空闲时,访问临界区的请求应立即响应;(d)进程在临界区中的驻留时间必须有限。
【答案解析】
问答题 分析该题中的互斥现象和同步现象。
【正确答案】该题中的互斥现象有两点:第一,因为简易桥是单向通过的,因此东西方向过桥的车辆对桥的使用是互斥的;第二,同方向上可能会同时有多辆车辆过桥,为了正确释放桥的使用,必须在程序中设置桥上车辆的计数器,对计数器的使用也是需要互斥的。该题中的同步现象有一点:当桥上已有4辆车时,同方向上的第5辆车及以后的车辆必须在桥下等待,而桥上的车辆下桥时,下桥的车辆和等待上桥的车辆之间存在同步现象。
【答案解析】
问答题 说明信号量的声明和初值设定的理由。
【正确答案】根据以上分析,信号量应该有4个:变量S初值为1,代表桥的互斥使用的信号量;变量Scounteast初值为1,代表由东向西方向行使的桥上的车辆计数器的互斥使用;变量Scountwest初值为1,代表由西向东方向行使的桥上的车辆计数器的互斥使用;变量Scount4初值为4,代表桥上车辆的计数信号量,用于同步管理。
【答案解析】
问答题 给出上述问题的解决算法,结合该算法,简述P、V操作解决该问题的基本思路。
【正确答案】算法如下:
semaphore S,Scounteast, Scountwest, Scount4;
S:=1;
Scounteast:=1;
scountwest:=1;
Scount4:=4;
Integer Counteast, Countwest;
Counteast:=0;
Countwest:=0;
Cobegin
Program east(i)
Begin
p(Scounteast);
if Counteast=0 then p(S);
Counteast:=Counteast+1;
V(Scounteast);
p(Scount4);
上桥;过桥;下桥;
V(Scount4);
P(Scounteast);
Countest:=Counteast-1;
if Counteast=0 then V(S);
V(Scounteast);
End
Program west(i)
Begin
P(Scountwest);
if Countwest=0 then P(S);
Countwest:=Countwest+1;
V(Scountwest);
p(Scount4);
上桥;过桥;下桥;
V(Scount4);
p(Scountwest);
Countwest=Countwest-1;
if Countwest=0 then V(S);
V(Scountwest);
End
coend
解题的基本思路如下。
关于桥的互斥使用:互斥管理只发生在:同方向上的第一辆车在上桥前需要查看桥的状态是否为“可用”,此时,可以使用P(S)操作;类似,同方向上的最后一辆车下桥时,必须释放桥的使用,此时,可以使用V(S)操作。
为判断桥上车辆数目,必须设置计数器Counteast和Countwest。而上述两变量则是为新引入的共享变量,必须互斥使用,因此设置两个信号量Scounteast和Scountwesl:,使用P、V操作进行管理。
桥的最大负荷为4辆车,实际上类似于“读者一写者问题”中共享有四个缓冲区的缓冲池,这是一种同步管理。根据题意,同步管理应该设置在“上桥”和“下桥”时,否则会出现等待车辆可能没有及时过桥的错误。
【答案解析】