死锁
什么是死锁?
所谓死锁,就是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。
死锁产生的4个必要条件
- 互斥:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。
- 请求和保持:当进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不剥夺:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
- 换路等待:在发生死锁时,必定存在一个进程-资源的环形链
解决死锁的基本方法
预防死锁
- 资源一次性分配:一次性分配所有资源,这样就不会再有请求了。
- 可剥夺资源:即某个进程获得了部分资源,但得不到其他资源的时候释放已有的资源
- 资源有序分配:系统给每类资源进赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反
避免死锁
系统在进行资源分配之前预先计算资源分配的安全性,若此次分配不会导致系统进入不安全的状态,则将资源分配给进程;否则,进程等待。
检测死锁
首先为每个进程和每个资源指定一个唯一的号码,然后简历资源分配表和进程等待表
解除死锁
当发现有进程死锁后,便应立即将其从死锁状态解救出来,常采用的方法有:
- 剥夺资源:从其他进程剥夺足够数量的资源给死锁进程,以解除死锁状态。
- 撤销进程:可以直接撤销死锁进程或撤销代价最小的进程,直至有足够的资源可用,死锁状态消除为止
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hexo!
