一.什么是死锁:
多个线程或进程在竞争资源时,产生一种僵持的现象,若无外力作用,无法推进。
二.产生死锁的原因
1.系统资源不足
2.进程推进顺序不当
三.产生死锁的必要条件
1.互斥条件 哲学家进餐
2.不剥夺条件 不能抢夺资源
3.请求和保持条件
4.循环等待条件 形成闭环 ---充分条件
四.死锁的处理策略
1.预防死锁
破坏四个必要条件
破坏互斥条件 ---资源变为共享资源
破坏不剥夺条件 ---把原来资源释放掉
破坏请求和保持条件 ---
破坏循环等待 --- 按顺序申请资源 --会导致资源利用率变低
2.避免死锁
让系统处于安全状态,就不会产生死锁 --- 银行家算法
不安全状态,就可能发生死锁
银行家算法
总数100
最大需求 已借走 最多还会借
a 70 20 50
b 40 10 30
t 50 30 20剩余40
如果40被a借走,三个人都不能得到可以还款的钱,就会死锁
被b,c借走则不会,b借走30就能还款,或者c借走20能还款,所以这里不会把钱借给a
3.死锁的检测与解除
图 消除变法
五.死锁的解除
1.资源剥离法
2.撤销进程法
3.进程回退法
六.清除对象如何考虑
1.进程优先级
2.已经执行时长
3.还有多长时间完成
4.进程已占用多少