什么是死锁
一组进程中的每一个进程都在等待仅由该组进程中其他进程才能引发的事件,这样就形成死锁了。
死锁的原因
- 竞争不可抢占的资源
- 竞争可消耗资源
- 进程推进顺序不当
死锁产生的必要条件
1.互斥条件:对资源互斥访问
2.请求和保持:进程已经拥有了一个资源,还需要拥有其他资源,此时其他资源被占用,进程阻塞。导致持有的资源保持不放
3.不可抢占:进程已经获取的资源在没有使用完之前是不能被释放的。只能等到进程完成时自己释放。
4.循环等待:
死锁的处理方式
预防死锁:
- 破坏请求保持的条件:请求多个资源的时候,只要有一个资源没有获取到,及时其他资源有,也不持有。
- 破坏不可抢占的条件:一个进程处于请求保持的时候,其他进程有权利释放他持有的资源,等到它再运行时,重新获取资源即可
- 破坏循环等待的条件:对资源进行标号,对资源获取只能按照标号的大小顺序获取,不能出现颠倒。
避免死锁:
- 银行家算法避免死锁
检查死锁:
- 资源分配图:入度边和出度边只能等于资源大小,就不会出现死锁。大于资源大小就会出现死锁
解除死锁:
- 资源抢占:从其他进程抢占资源,分配给死锁进程
- 终止进程:撤销一个或多个死锁进程,释放资源