• 0
  • 0
分享
  • 产生死锁的必要条件?怎样预防和避免死锁?——软件测试圈
  • 恬恬圈 2023-09-27 16:03:40 字数 1098 阅读 849 收藏 0

  1. 什么是死锁?

  当多个进程 在运行过程中 因为争夺资源 而造成的一种僵局, 当进程处于这种僵持状态的时候, 若无外力作用, 它们将永远无法向前推进. 这种状态就称为死锁。

  2. 产生死锁的必要条件

  产生死锁总共有 4 个必要条件:

  ·资源互斥: 当一个资源被一个进程使用时候, 其他继承不能使用该资源

  · 资源不可剥夺: 进程已持有的资源在使用完之前是不可被剥夺的, 只能在使用完后由自己释放

  · 请求和保持: 当进程在请求其他资源的时候, 对自己已持有的资源保持不放

  · 循环等待: 即存在一个等待队列: 例如: A 占有 B 的资源, B 占有 C 的资源, C 占有 A 的资源, 这样就形成了一个等待环路

  当以上 4 个条件同时成立的时候, 就会产生死锁。

  3. 预防死锁的方法

  资源一次性分配(破坏请求条件): 一次性分配所有的资源, 这样就不会再有请求了。

  (破坏保持条件): 一个进程只要有一个资源得不到分配, 就也不给这个进程分配其他资源。

  可剥夺资源(破坏不可剥夺性): 一个进程即使获得了部分资源, 但是如果得不到其他资源, 就需要释放掉已有的资源。

  资源有序分配(破坏循环等待): 系统为每类资源分配一个编号, 每一个进程按照编号以递增的顺序请求资源, 释放则相反。

  4. 避免死锁的方法

  预防死锁的四种方法, 都会严重的影响系统性能. 因此可以尽可能去避免死锁的产生。

  在避免死锁的策略中, 允许进程动态地申请资源. 所以, 系统在进行资源分配的时候, 会预先计算资源分配的安全性, 如果此次资源分配不会导致系统进入不安全的状态, 就将资源分配给进程, 否则, 进程等待。

  避免死锁的方法中最经典和最重要的就是: 银行家算法。

  原理:

  将操作系统视为一个银行家, 将操作系统所管理的资源视为银行家的资金, 进程申请资源就视为用户向银行家贷款。

  当一个顾客对资金的最大需求量不超过银行家现有的资金时, 就可以接纳该顾客。

  顾客可以分期贷款, 但是贷款的总额不可以超过最大需求量。

  当银行家现有资金不能满足用户尚需的贷款金额时, 可以推迟支付贷款, 但是使顾客在有限的时间内拿到贷款。

  当顾客得到所有所需资金后, 一定可以在有限时间内归还所有的资金。

  5. 解除死锁的方法

  剥夺资源: 从其他进程剥夺足够数量的资源给死锁, 用以解除死锁状态。

  撤销进程: 撤销系统中一个或者多个死锁进程。


作者:HHHHH-Y    

来源:http://www.51testing.com/html/15/n-4481115.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 随着软件开发过程复杂性的不断增加,客户希望得到新软件的期望周期也越来越短,所以软件测试方法需要不断的发展快速适应新的开发模式,敏捷测试的呼声越来越高,以下是CC先生对敏捷测试的一些思考。敏捷测试的定义在CC先生初次遇到敏捷的时候,认为敏捷只是有关于流程和工具,学习了一系列有关于敏捷的流程和自动化测试的工具,随着对敏捷理解的深入,越发能体会到敏捷不仅仅是关于流程和工具,它是关于人和文化的! 受到这种认识的启发,CC先生开始深入了解敏捷的历史 - 事实证明,人和文化一直是敏捷的核心。敏捷测试也是如此,它不仅是流程和工具的更改,它更倾向于一种新的测试模式,高投入产出比的同时也提供高质量的产品。如果把...
            0 1 3305
            分享
          •   起亚在海外宣布召回 12400 辆 EV9 电动汽车,原因是其智能遥控泊车辅助系统存在潜在的安全隐患。  参考美国国家公路交通安全管理局(NHTSA)发布的报告,这款车在低速情况下可能无法正确刹车,从而导致车辆无法在需要时及时停止,进而可能撞到行人或物体。▲ 美国国家公路交通安全管理局发布的报告  据悉,此次召回涉及的车型为 2024 年 5 月 28 日之前生产的 EV9 GT-Line 和 Land 版本,这些车辆都配备了名为“Remote Smart Park Assist”的智能遥控泊车辅助系统,车主可以使用钥匙上的按钮,在车外控制车辆进行自动泊车或移出停车位。  据获悉,起亚声称...
            0 0 307
            分享
          •   随着金融科技的不断发展与创新,大数据人工智能、云计算等技术在金融领域的应用日益深入,数字金融领域不断涌现出物联网和数字货币等新兴场景。这无疑加剧了各个银行之间的竞争,谁能推出时效性高、创新性高、体验性好的产品,谁就能在市场取得先机。这一趋势无疑对金融系统安全带来了巨大的挑战,也对提出了更高的要求。  测试作为产品研发生命周期的重要一环,在质量保障上已经扮演了越来越关键的作用。手工测试因投入大,效率低等弊端,已经逐渐无法满足金融科技背景下产品快速迭代的需要。通过各项技术开展自动化测试是金融科技背景下银行测试的必经之路。  自动化测试简介与分类  自动化测试是指把以人为驱动的测试行为转化为机器...
            14 14 2130
            分享
          •   购物车页面用例设计  一、购物车页面  二、购物车页面测试范围列表  三、购物车页面功能点需求分析  四、部分功能点的测试用例设计  购物车页面  1、验证添加商品到购物车页面合法,添加成功  ·步骤描述  选择不大于20种商品点击加入购物车,再进入我的购物车页面对比选中的商品结果。  ·测试数据  商品种类:1种、19种、20种  ·预期结果  1)购物车页面显示的商品与添加的商品一致  2)公共头部购物车角标+1、+19、+20  3)数据库表tp_cart新增1条/19条/20条记录  2、验证添加商品到购物车页面种类数非法,添加失败  ·步骤描述  选择大于20种商品加入购物车,再...
            10 10 2266
            分享
          • 1. JMeter是什么?         Apache JMeter 是Apache组织的开放源代码项目,是一个纯Java桌面应用,用于压力测试和性能测试。它最初被设计用于Web应用测试但后来扩展到其它测试领域。可以到http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi下载源代码和查看相关文档。 2. 用它能做什么?         A...
            0 0 1704
            分享
      • 51testing软件测试圈微信