解决死锁的方式可以从多个角度去分析,一般的情况下分为预防、避免、检测、解除
- 预防 限制并发进程对资源的请求,从而使得死锁的必要条件在系统执行的任何时间都不满足
- 避免 系统在分配资源的时候,根据资源的使用情况提前做出预测,从而避免死🔒的发生
- 检测 系统设有专门的机构,当死锁发生时,该机构能够检测死锁的发生,并精确地确定与死锁有关的进程和资源。
- 解除 将进程从死锁状态下解脱出来。
死锁的预防
破环死锁的四个必要条件中的一个就可以达到预防死锁的目的 互斥和不剥夺在大多数情况下行不通 一般考虑破环请求和保持和循环等待
- 静态资源策略 解释:进程在运行之前就能申请到所需要的全部资源才开始执行。进程要么占有所有的资源,要么不占有资源不执行。 缺点:资源的利用率很低. 主要破坏的是请求和保持条件
2.层次分配策略
破坏死锁产生的循环等待条件,所有资源被分成多个层次,得到某个资源之后只能申请更高层的资源,释放某个资源的时候,必须先释放较高层的资源。
死锁的避免
概念:通过控制系统对资源的分配,可以避免死锁的发生。案例: 银行家算法
系统在向一个进程分配资源的时候,是否会让系统进入非安全状态。当某个进行向系统申请资源时,如果系统分配这个资源后进入了非安全状态,那么系统就不会分配资源给这个进程,从而避免了死锁的发生。
安全状态: 系统的剩余资源可以使得系统内所有的进程都执行完毕的一种方案,如果这个方案存在,那么系统就是安全状态的。