锁顺序死锁

死锁形成的几个必要条件
1、互斥
2、等待
3、不可抢占
4、循环等待

避免死锁的方法就是,打破任一个必要条件。循环等待最容易打破。
科学家进餐问题。(都是在获取左边的锁,)

abcde5个科学家顺时针坐在圆桌上(按先获取左边的锁,再去获取右边的)
假如 a要获取b的锁(right锁),(如果a现在无法获取b的锁,证明b现在有左边的锁,而且右边的锁没有被占用,b同时占用了2个锁之后执行结束释放左右的锁)a在b释放锁之后获取b的锁(也就是right锁)

简单的锁顺序死锁
一个操作是先获取左边的锁然后获取右边的锁,另一个操作先获取右边的锁然后获取左边的锁。
当一个线程获取了左边的锁之后准备去获取右边的锁,但是另一个线程获取了右边的锁,正准备获取左边的锁。这样锁都不会被释放形成死锁。

解决方法:

制定一个获取锁的顺序, 两个操作都先获取left或者先获取right(操作获取锁顺序是一致的)。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容