一、死锁的定义
死锁是一种由于多个进程竞争资源而陷入的一种僵局,若无外力作用,所有进程都将无法向前推进。
二、死锁的产生原因
- 竞争资源
- 进程间推进顺序非法
三、死锁的四个必要条件
- 互斥条件
- 不可剥夺条件
- 保持并请求条件
- 环路等待条件
四、如何避免死锁
- 按同一顺序访问对象 (避免出现循环)
- 避免事务中的用户交互 (减少持有资源的时间,较少锁竞争)
- 保持事务简短并处于一个批处理中 (减少持有资源的时间)
- 使用较低的隔离级别 (使用较低的隔离级别(例如已提交读)比使用较高的隔离级别(例如可序列化)持有共享锁的时间更短,减少锁竞争)
- 使用基于行版本控制的隔离级别
银行家算法是一个避免死锁的著名算法:
当一个进程申请使用资源的时候,银行家算法通过【先 试探 分配给该进程资源】,然后【通过安全性算法判断分配后的系统是否处于安全状态】,若不安全则试探分配作废,让该进程继续等待。