失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 死锁和哲学家就餐问题

死锁和哲学家就餐问题

时间:2020-05-10 01:40:49

相关推荐

死锁和哲学家就餐问题

死锁问题

多线程因访问锁资源不当,导致永久挂起,无法继续,程序功能瘫痪

死锁产生的四个必要条件

* 四个条件都满足,死锁才会发生,这也是避免死锁问题的重要提示

1. 请求与保持条件:线程占用自身资源后,还要请求其他线程占用的资源

2. 互斥条件:锁资源的特性就是互斥性,同一时刻只允许一个线程访问,其他线程访问则被系统挂起

3. 不可剥夺条件:一个线程占用了资源(lock)后,无法通过外力强制剥夺该资源,只能由占有者自行释放

4. 循环等待条件:多线程并发,资源有限的情况下,每个单位都在等待相应线程资源

哲学家就餐问题

多线程资源有限的情况下,如何合理使用资源

1,2,3,4,5 假设都为单只筷子

哲学家行为模式

就餐:哲学家会先拿左手边的资源再获取右手边的,这个顺序每个哲学家都一样,两个资源都获取到,完成进餐任务

思考:不做任何事情,不需要任何资源

* 哲学家行为模式不可预测,随机触发

死锁现象:哲学家同时进餐,每个人获取左手资源,等待请求右手资源,但是无法获取,产生等待环路,造成死锁现象(永久被挂起)饥饿

活锁现象:哲学家获取一个资源后,发现另一个被占用,自己无法进餐,礼貌机制触发,释放占用的资源,但是如果五个哲学家行为同步,产生活锁,频繁申请释放资源,最终一直处于饥饿状态

高权策略:某个哲学家权限最高,他要进餐可以想低权哲学家发送通知,其他哲学家放弃进餐(资源无法有效利用,有效资源被浪费)

服务者模式:加入服务者单元,检测记录餐桌上资源占用情况,每个哲学家进餐是,询问服务者是否可以进餐,服务者根据餐桌上的情况进行反馈,在服务者的干预下,多个哲学家可以有序地进餐,资源可以被有效利用

银行家算法这里暂不介绍,有向了解的读者可以参考这篇文章

如果觉得《死锁和哲学家就餐问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。