死锁

1 死锁概念

由于两个或者两个以上的(进程)去抢夺一份资源而造成阻塞的状态叫做死锁, 如果出现了死锁,会造成线程的循环等待,如果没有外力的帮助,就会一直维持着某种状态

2 发生死锁的四个必要条件

1. 互斥。非共享资源是互斥的,同一时刻只能有一个进程占有该资源 
2. 占有并等待。一个进程必须占有至少一个资源,比等待另一资源,而该资源为其它进程所占有。
3. 非抢占。资源不能被抢占,即资源只能在进程完成任务后自动释放。
4. 循环等待。设有一组进程P0,P1,...,Pn,进程P0等待的资源为P1所占有,进程P1等待的资源为P2所占有,... ,进程Pn-1等待的资源为Pn所占有,进程Pn等待的资源为P1所占有。

总的来说,死锁发生的原因可归结为三点:

 1. 当前进程拥有其他进程需要的资源;
 2. 当前进程等待其他进程已拥有的资源;
 3. 都不放弃自己的资源。

3 死锁处理

3.1 死锁预防

只要确保至少一个必要条件不成立,就能预防死锁。通过限制如何申请资源的方法来预防死锁。

3.1.1 互斥

对于非共享资源,必须要有互斥条件。

3.1.2 破坏占有并等待条件

破坏此条件,必须保证:当一个进程申请一个资源时,它不能占有资源。
有两种方法:

  1. 每个进程在执行之前申请并获得所有资源。
  2. 允许进程在没有资源时才可申请资源。

3.1.3 破坏资源不可被抢占条件

为确保这一条件不成立,可以使用如下协议:如果一个进程占有资源并申请一个不能立即分配的资源,那么其现已分配的资源都可被抢占。

3.1.4 破坏循环等待条件

对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请资源。

3.2 死锁恢复

3.2.1 进程终止

有两种方法通过终止进程以取消死锁。不管采用哪种方法,系统都会收回分配给被终止进程的资源。

  • 终止所有所有死锁进程。缺点:代价太大。
  • 一次只终止一个进程知道取消死锁循环为止。缺点:每终止一个进程,都必须调用死锁检测算法以确定进程是否仍处于死锁。

3.2.2 资源抢占

通过抢占资源以取消死锁,逐步从进程汇总抢占资源给其他进程使用,知道死锁环被打破。
这种情况有三点必须要考虑:

  • 选择一个牺牲品。抢占那些资源和哪个进程?必须确定抢占顺序以使代价最小化。
  • 回滚。如果从一个进程那里抢占一个资源,那么应对该进程做些什么安排?即必须将进程回滚到某个安全状态,以便从该状态重启进程。
  • 饥饿。如何确保不会发生饥饿?如何确保资源不会总是从同一个进程中被抢占?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值