死锁的一些概念和银行家算法

死锁定义:

举个例子来阐述死锁,假设当前系统中由两个进程A和B,他们的运行都依赖资源M和N,此时呢,进程A持有了资源N,进程B持有了资源M,
进程A在等待资源M,进程B在等待资源N,两个谁也不释放资源,都在等待对方释放,然后两个进程都无法继续向下推进了,这就是死锁。

死锁的成因:

  1. 资源互斥使用,这些资源都是互斥的,不能同时被使用;
  2. 不能抢占,资源只能由进程主动的去退让;
  3. 请求和保持状态同时进行,也就是既持有资源,又去请求其他资源;
  4. 循环等待

死锁的处理:

预防:

破坏死锁出现的条件:
1.一次性申请所有资源,不会已经占用一部分资源又去申请其他资源;
2.资源申请必须按序

避免:

对每一次的资源申请进行检测,判断资源分配出去会不会有危险,会不会造成死锁,有的话就拒绝:

银行家算法:分析系统现有资源和所有进程(p1,p2.p3,p4)已有资源,计算出一条可行的执行序列,比如p2->p1->p3->p4
即先将资源满足p2,然后p2结束,是否资源,再去满足p1的资源,p2继续运行,一次类推
银行家算法一篇不错的文章
缺点:
算法复杂度高,每次资源分配都得执行一次算法,效率低下

死锁检测和恢复:

定时检测死锁,如果已经死锁,让某个死锁进程回滚,让出资源,然后运行一次银行家算法,得出安全序列,解除死锁

优点:产生死锁才执行算法,效率能提升
缺点:回滚实现起来比较困难

死锁忽略:

忽略

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值