【正确答案】算法如下: 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辆车,实际上类似于“读者一写者问题”中共享有四个缓冲区的缓冲池,这是一种同步管理。根据题意,同步管理应该设置在“上桥”和“下桥”时,否则会出现等待车辆可能没有及时过桥的错误。