当前位置:主页 > 查看内容

计算机基础-死锁(概念、产生条件、解决方案)

发布时间:2021-05-29 00:00| 位朋友查看

简介:文章目录 一、死锁概念 二、造成死锁的条件 三、解决死锁 1.死锁防止 2.死锁避免 3.死锁检测和恢复 3.1检测 3.2恢复 一、死锁概念 当线程A持有独占锁a并尝试去获取独占锁b的同时线程B持有独占锁b并尝试获取独占锁a的情况下就会发生AB两个线程由于互相持有对……

一、死锁概念

当线程A持有独占锁a,并尝试去获取独占锁b的同时,线程B持有独占锁b,并尝试获取独占锁a的情况下,就会发生AB两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。

二、造成死锁的条件

造成死锁必须达成的4个条件(原因):

  1. 互斥条件:一个资源每次只能被一个线程使用。
  2. 请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放。
  3. 不剥夺条件:线程已获得的资源,在未使用完之前,不能强行剥夺。
  4. 循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系。

例子:

  • 进程顺序不当
  • PV操作使用不妥
  • 同类资源分配不均
  • 对某些资源的使用未加限制

三、解决死锁

  • 死锁防止
  • 死锁避免
  • 死锁检测和恢复

1.死锁防止

防止死锁就是破坏造成死锁的,若干条件中的任意一个。

  1. 互斥条件 —> 独占锁的特点之一。
  2. 请求与保持条件 —> 独占锁的特点之一,尝试获取锁时并不会释放已经持有的锁
  3. 不剥夺条件 —> 独占锁的特点之一。
  4. 循环等待条件 —> 唯一需要记忆的造成死锁的条件。

在并发程序中,避免了逻辑中出现复数个线程互相持有对方线程所需要的独占锁的的情况,就可以防止死锁。

2.死锁避免

在程序运行时避免发生死锁。

3.死锁检测和恢复

3.1检测

不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。

  • 如果进程 - 资源分配图中无环路,此时系统没有发生死锁。
  • 如果进程 - 资源分配图中有环路,则可分为以下两种情况:
    • 每种资源类中仅有一个资源,则系统发生了死锁。此时,环路是系统发生死锁的充分必要条件,环路中的进程就是死锁进程。
    • 每种资源类中有多个资源,则环路的存在只是产生死锁的必要不充分条件,系统未必会发生死锁。

3.2恢复

  • 资源剥夺法
    剥夺陷于死锁的进程所占用的资源,但并不撤销此进程,直至死锁解除。

  • 进程回退法
    根据系统保存的检查点让所有的进程回退,直到足以解除死锁,这种措施要求系统建立保存检查点、回退及重启机制。

  • 进程撤销法
    撤销陷入死锁的所有进程,解除死锁,继续运行。
    逐个撤销陷入死锁的进程,回收其资源并重新分配,直至死锁解除。
    可选择符合下面条件之一的先撤销: 1.CPU消耗时间最少者 2.产生的输出量最小者
    3.预计剩余执行时间最长者 4.分得的资源数量最少者后优先级最低者

  • 系统重启法
    结束所有进程的执行并重新启动操作系统。这种方法很简单,但先前的工作全部作废,损失很大。

更多方案参考https://zhuanlan.zhihu.com/p/61221667

参考
https://www.jianshu.com/p/44125bb12ebf
https://zhuanlan.zhihu.com/p/61221667

本文链接https://blog.csdn.net/qq_39903567/article/details/115531838

;原文链接:https://blog.csdn.net/qq_39903567/article/details/115531838
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐