操作系统-用信号量解决过独木桥问题

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

解答:
信号量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);
}

  • 23
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值