哲学家就餐问题

问题描述:

有五个哲学家绕着圆桌坐,每个哲学家面前有一盘面,两人之间有一支筷子,这样每个哲学家左右各有一支筷子。哲学家有2个状态,思考或者拿起筷子吃饭。如果哲学家拿到一只筷子,不能吃饭,直到拿到2只才能吃饭,并且一次只能拿起身边的一支筷子。一旦拿起便不会放下筷子直到把饭吃完,此时才把这双筷子放回原处。如果,很不幸地,每个哲学家拿起他或她左边的筷子,那么就没有人可以吃到饭了.

分析问题:

1.有五个哲学家,5个筷子.
2.只有一个哲学家拿到左右两个筷子时,才可以进餐.
3.那么食物就是五个哲学家的共享资源,哲学家要想访问共享
  资源,就必须抢到他的左右两个筷子,即要加锁成功.
4.所以就可以想到,五个筷子就是五把锁,
                 五个哲学家就是五个线程,

每个线程都要去抢夺锁,抢到左右两把锁,就可以吃饭了.

如果我们让每个哲学家先拿到自己左手的锁,
然后再尝试拿右手的锁,
拿到了,就吃饭,
拿不到两把锁都释放.
那么这就会有一个问题,如果每个哲学家同时拿到自己左手的锁,然后尝试去拿右手的锁,那肯定是拿不到的,这就会一直往复下去,谁都吃不了饭,这是一种死锁现象,到最后都会饿死.

方法一:

让其中一个哲学家反着来,他是先拿右手筷子再拿左手筷子
就不会造成同步的振荡的现象了

1

方法二:

我们把筷子看做临界资源,我们只需让哲学家拿到
它的左右两个筷子就可以了.
1.把五个筷子看作数组的五个元素
	元素值为1时表示筷子空闲
	元素值为0时表示筷子被
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值