1.24、死锁是什么?死锁产生的条件,如何解决死锁?
多线程死锁是指多个线程在执行过程中因竞争资源而相互等待,导致所有线程都无法继续执行的僵局状态。简单来说,就是线程A持有资源1等待资源2,线程B持有资源2等待资源1,双方互不释放,程序就陷入了“卡死”状态。
死锁产生的四个必要条件
- 1. 互斥条件:资源一次只能被一个线程占用,其他线程必须等待。
- 2. 请求与保持条件:线程在持有某个资源的同时,申请其他资源而不释放已持有的资源。
- 3. 不可剥夺条件:资源只能由占有它的线程主动释放,不能被强制剥夺。
- 4. 循环等待条件:存在一个线程等待链,形成环路等待资源,导致相互依赖。
这四个条件必须同时满足,死锁才会发生。
解决死锁的思路
破坏上述任意一个条件即可避免死锁,常用方法包括:
- • 破坏循环等待:最常用且实用的方法是对所有锁进行全局排序,线程按固定顺序申请锁,避免形成环路等待。例如,所有线程都按照锁编号从小到大依次加锁。
- • 避免请求与保持:线程在申请新资源前,先释放已持有的资源,避免同时持有多个资源。
- • 使用超时机制:加锁时设置超时,超时后放弃请求,避免无限等待。
- • 减少锁的粒度和数量:尽量减少锁的使用,避免多个锁交叉持有导致死锁。
- • 死锁检测与恢复:系统定期检测死锁状态,发现后通过回滚、终止某些线程等方式恢复。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1249
文章版权归作者所有,未经允许请勿转载。
THE END