--问题描述:
五位哲学家围坐在一张圆桌旁,每位哲学家面前有一盘食物,每两位哲学家之间放有一根筷子。哲学家们的生活由两种活动交替进行:思考和就餐。为了就餐,哲学家需要拿起左右两边的两根筷子。如果筷子被其他哲学家占用,则必须等待。

--什么是死锁?
死锁:
现在有两个线程1和2,线程1和线程2完成任务需要同时持有A和B两个资源,假设某时线程1持有了资源A并将其上锁,线程2持有了资源B并将其上锁,线程1和2为了完成任务就需要去获取彼此的资源,但是又因为想获取的对方资源已经被对方上锁,在彼此都不去解锁资源的前提下,就会无限的等待
特性关键词:
- 互斥条件(资源A、B各自不可被多个线程持有)
- 占有并等待(比如线程1持有了A资源等待线程2持有的B资源)
- 不可剥夺(彼此都不去解锁资源)
- 循环等待(都要获取对方,但对方都锁了不愿意给,无限等待)
--哲学家就餐发生死锁的情况:
哲学家就餐需要拿取左右两双筷子才可以就餐,那么如果当每位哲学家同时都拿起了左边或者右边的筷子时,就会发生死锁(一位哲学家请求获取另一边的筷子被相邻哲学家获取并上锁)
--如何解决哲学家就餐发生死锁?
- 最多同时4位哲学家就餐
比如:当这4位哲学家都拿起了左边筷子,还剩一根筷子会保证至少一个人能完成自己吃饭的任务(每个人左右都有两根筷子,剩余的一根筷子一定是一个人的另一边筷子) - 每位哲学家只有两双筷子都可获取时才可以就餐
哲学家问题里只要有一个人能吃完饭别的也不会饿肚子 - 超时机制
如果无法在规定时间内获取到另一根筷子,则释放已持有的筷子并重新尝试。 - ......
--总之:
问题解决方案不固定,核心问题其实是打破死锁,从什么是死锁及其条件入手打破死锁,互斥肯定是互斥的无法解决但是还有三方面可以下手:
- 占有并等待(比如线程1持有了A资源等待线程2持有的B资源)
- 不可剥夺(彼此都不去解锁资源)
- 循环等待(都要获取对方,但对方都锁了不愿意给,无限等待)
212



被折叠的 条评论
为什么被折叠?



