题:请用信号量解决以下的“过独木桥”问题:同一方向的行人可连续过桥,当某一方向有人过桥时,另一方向的行人必须等待;当某一方向无人过桥时,另一方向的行人可以过桥。
解答:
信号量brigde表示独木桥互斥访问,初值为1;变量eastcount和westcount分别表示从东西方上独木桥的行人数量,初值为0,信号量eastmutex和westmutex是对变量eastcount和westcount数据读写的保护,初值为1。
东方:
while(true){
P(eastMutex);
eastCount++;
if(eastCount == 1)
P(brigde);
V(eastMutex);
上桥
下桥
P(eastMutex);
eastCount--;
if(eastCount == 0)
V(brigde);
V(eastMutex);
}
西方:
while(true){
P(westMutex);
westCount++;
if(westCount == 1)
P(brigde);
V(westMutex);
上桥
下桥
P(westMutex);
westCount--;
if(westCount == 0) V(bridge);
V(westMutex);
}