产生死锁的必要条件?怎样预防和避免死锁?

发表于:2022-2-07 09:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:HHHHH-Y    来源:CSDN

#
死锁
分享:
  1. 什么是死锁?
  当多个进程 在运行过程中 因为争夺资源 而造成的一种僵局, 当进程处于这种僵持状态的时候, 若无外力作用, 它们将永远无法向前推进. 这种状态就称为死锁。
  2. 产生死锁的必要条件
  产生死锁总共有 4 个必要条件:
  ·资源互斥: 当一个资源被一个进程使用时候, 其他继承不能使用该资源
  · 资源不可剥夺: 进程已持有的资源在使用完之前是不可被剥夺的, 只能在使用完后由自己释放
  · 请求和保持: 当进程在请求其他资源的时候, 对自己已持有的资源保持不放
  · 循环等待: 即存在一个等待队列: 例如: A 占有 B 的资源, B 占有 C 的资源, C 占有 A 的资源, 这样就形成了一个等待环路
  当以上 4 个条件同时成立的时候, 就会产生死锁。
  3. 预防死锁的方法
  资源一次性分配(破坏请求条件): 一次性分配所有的资源, 这样就不会再有请求了。
  (破坏保持条件): 一个进程只要有一个资源得不到分配, 就也不给这个进程分配其他资源。
  可剥夺资源(破坏不可剥夺性): 一个进程即使获得了部分资源, 但是如果得不到其他资源, 就需要释放掉已有的资源。
  资源有序分配(破坏循环等待): 系统为每类资源分配一个编号, 每一个进程按照编号以递增的顺序请求资源, 释放则相反。
  4. 避免死锁的方法
  预防死锁的四种方法, 都会严重的影响系统性能. 因此可以尽可能去避免死锁的产生。
  在避免死锁的策略中, 允许进程动态地申请资源. 所以, 系统在进行资源分配的时候, 会预先计算资源分配的安全性, 如果此次资源分配不会导致系统进入不安全的状态, 就将资源分配给进程, 否则, 进程等待。
  避免死锁的方法中最经典和最重要的就是: 银行家算法。
  原理:
  将操作系统视为一个银行家, 将操作系统所管理的资源视为银行家的资金, 进程申请资源就视为用户向银行家贷款。
  当一个顾客对资金的最大需求量不超过银行家现有的资金时, 就可以接纳该顾客。
  顾客可以分期贷款, 但是贷款的总额不可以超过最大需求量。
  当银行家现有资金不能满足用户尚需的贷款金额时, 可以推迟支付贷款, 但是使顾客在有限的时间内拿到贷款。
  当顾客得到所有所需资金后, 一定可以在有限时间内归还所有的资金。
  5. 解除死锁的方法
  剥夺资源: 从其他进程剥夺足够数量的资源给死锁, 用以解除死锁状态。
  撤销进程: 撤销系统中一个或者多个死锁进程。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号