zoukankan      html  css  js  c++  java
  • 死锁

    死锁定义和产生的根本原因

    两个p进行交换

    哲学家进餐问题,每个哲学家都拿不到右边的筷子,而阻塞等待,而且永远等待下去。

    1. 死锁的定义

    一组进程因竞争资源而造成的一种僵局,即每个进程都占有部分资源,同时又需得到已被该组进程中其他占用的资源,若无外力作用,这些进程将永远处于等待状态

    一种死锁状态的例子

    假设系统中有一个R1,一个R2资源,一次只允许一个进程使用,P1申请一个R1,再申请一个R2;P2申请一个R2,再申请一个R1;

    P1:
    P(R1);
    P(R2);
    ...
    V(R1);
    V(R2);

    P2:
    P(R2);
    P(R1);
    ...
    V(R2);
    V(R1);

    1. 死锁产生的根本原因
      (1) 竞争资源
      (2) 进程推进顺序不当

    P1:
    P(R1);
    P(R2);
    ...
    V(R1);
    V(R2);

    P2:
    P(R2);
    P(R1);
    ...
    V(R2);
    V(R1);

    产生死锁的四个必要条件:

    (1) 互斥条件

    对于独占资源,每个资源每次只能给一个进程使用,进程一旦申请到了资源后占为已有,则排斥其它进程共享该资源。

    (2) 不剥夺条件

    正在使用的资源不可剥夺,进程获得的资源尚未使用完毕之前,只能由占有者自己释放,不能被其它进程强行占用。

    (3) 请求和保持条件

    进程因未分配到新的资源而受阻,但又不放弃已占有的资源。

    (4) 环路等待条件

    存在进程的循环等待链,前一进程占有的资源正是后一进程所需求的资源,结果就形成了循环等待的僵持局面。

    上面四个条件是在死锁发生时同时出现的,我们可以利用它们的逆否命题,即:四个条件中只要有一个不满足,则死锁不会发生。这正是我们预防死锁所需考虑的方法。

    死锁不仅会发生在两个进程之间,也可能发生在多个进程之间,甚至发生在全部进程之间。此外,死锁不仅会在动态使用外部设备时发生,而且也可能在动态使用存储区、文件、缓冲区、数据库时发生,甚至在进程通信过程中发生。随着计算机资源的增加,系统出现死锁现象的可能性也大大增加,死锁一旦发生,会使整个系统瘫痪而无法工作。因此,要想办法解决死锁问题。

    死锁的处理方法

    • 死锁预防 破坏必要条件
    • 死锁避免 银行家算法
    • 死锁检测 死锁定理
    • 死锁解除 剥夺资源、撤销进程

    1.死锁的预防

    采取某种策略,限制并发进程对资源的请求,从而保证死锁的必要条件在系统执行的任何时间都不能得到满足。

    2.死锁的避免

    是指系统在分配资源时,根据资源的使用情况提前做出预测,给定一个合适的安全的进程推进顺序,从而避免死锁的发生。实现起来有一定的难度,但在一些较完善的系统中,常用这种方法。

    3.死锁的检测

    允许系统发生死锁。系统设有专门的机构,当死锁发生时,该机构能够检测到死锁的发生,并能确定参与死锁的进程及相关资源。

    4.死锁的解除

    这是与死锁检测相配套的措施,用于将进程从死锁状态中解脱出来。

    常用的解除死锁的方法有两种:

    • 一种是强制性地撤销一些死锁进程,并剥夺它们的资源给其余进程;

    • 另一种是使用一个有效的挂起机构来挂起一些进程,以便从被挂起进程中剥夺一些资源来解除死锁。

  • 相关阅读:
    TortoiseGit 连接 git服务器免输入用户名和密码的方法
    mongodb 对参数类型的严格区分
    google API 使用Client Login 登录授权
    GAPI is the Google Analytics PHP5 Interface
    pr导出mp4格式提示无法播放解决方案
    PR如何导出mp4格式的视频
    pr 如何给视频进行加速,慢速处理
    如何用premiere添加配乐?pr视频添加音乐
    操作系统-银行家算法
    操作系统 内存分配算法
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/12695211.html
Copyright © 2011-2022 走看看