题目:
有一个独木桥,过桥时,同一方向的行人可连续过桥;当某一方向有人过桥时,另一方向的人必须等待;当某一方向无人过桥时,另一方向的行人可以过桥。试用信号量机制解决:
解决思路:
将独木桥的两个方向分别标识为A和B。用整型变量countA和countB分别表示A
、B方向上已在独木桥上的人的个数。初始值都设为0;同时,需要设置三个初始值都为1的互斥信号量:SA用来实现对countA的互斥访问,SB用来实现对countB的互斥访问,mutex用来实现对独木桥的互斥使用。(SA、SB两个互斥信号量的使用可以使得进程对countA、countB不会因为并发的不确定性被任意更改)
代码实现:
对于A方向:
P(SA)
IF (countA=0)
THEN P(metux)
countA=countA+1
V(SA)
过桥
P(SA)
countA=countA-1
IF(countA=0)
THEN V(metux)
V(SA)
对于B方向:
P(SB)
IF (countB=0)
THEN P(metux)
countB=countB+1
V(SB)
过桥
P(SB)
countB=countB-1
IF(countB=0)
THEN V(metux)
V(SB)