死锁概念
死锁:多个进程(线程)因循环等待资源而造成无法执行的现象。
死锁形成的4个必要条件
- 互斥使用
- 不可抢占
- 持有和等待:进程占有资源,同时去申请资源。
- 循环等待:存在环路。
死锁处理方法
死锁预防:破坏死锁的必要条件
然而互斥使用一般无法破除。
死锁避免:检测到有死锁的风险就拒绝
动态检查资源分配状态,确保永远不会有一个环形等待状态,使系统处于安全状态。
安全状态:系统中所有进程存在一个可完成执行序列的状态。
安全序列:使系统处于安全状态的执行序列。
银行家算法:尝试寻找一个安全的执行时序。
所需参数:
n:进程总数
m:资源种类总数
Available:资源当前可用总量
Allocation:已分配的各种资源数量
Need:进程还需分配的各种资源数量
Work:可分配资源(包括可回收的)
核心思想:
安全序列P1,P2,…,Pn应满足:
Pi(1<=i<=n)需要资源 <= 剩余资源+分配给Pj(1<=j<=i)资源
死锁检测+恢复:从死锁状态中恢复
- 方法一:终止线程
- 方法二:剥夺资源