zoukankan      html  css  js  c++  java
  • 死锁

    死锁的定义:两个或多个进程无限期地等待永远不会发生的条件的一种系统状态

      结果:每个进程都被永远堵塞

    定义2:在两个或多个进程中,每个进程都有某种资源但需要申请另一个进程持有的某种资源,此时每个进程都拥有其部分运行所需的一部分资源但是都不够,所以都堵塞。

    死锁的起因

      1.资源数目不足,进程对资源的竞争而产生死锁

      2.并发进程的推进顺序不当:

        进程请求资源和释放资源的顺序不当,导致死锁。

    死锁预防策略:

       死锁的必要条件:

        1.互斥条件:进程互斥使用资源,资源具有独占性

        2.不剥夺条件:进程在访问完资源前不能被其他进程强行波多

        3.部分分配条件:

          进程边运行边申请资源,临时需要临时分配

          区别于 全部分配

        4.环路条件:

        多个进程构成环路:环中每个进程已占用的资源被前一进程申请,而自己所申请的资源又被环中后一进程占用着

    解决死锁的策略

      预防死锁

        通过设置某些限制条件,破坏死锁四个必要条件中的一个或多个来预防死锁

          破坏互斥条件(难)

          破坏不剥夺条件(代价大)

          破坏部分分配条件(预先静态分配)

          破坏环路条件(有序资源分配)

        优点:容易实现,广泛使用

        缺点:限制严格,资源利用率和吞吐量降低

      避免死锁:

        不事先采取限制去破坏产生死锁的条件,而是在资源分配过程中,用某种方法去评估若分配资源是否会让系统进入死锁状态,若是拒绝分配从而避免死锁

        优点:只需要较弱的限制条件,可以获得较高的资源利用率和系统吞吐量

        缺点:实现比较难

      检测死锁和恢复死锁:

        允许死锁发生,但可以通过检测机制及时检测出死锁状态,并精确明确与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除,将进程从死锁状态解脱出来。

        缺点:1。检测方法复杂,难度大

           2.恢复方式靠人工

      预先静态分配法:

        目的:破坏部分分配条件

        策略:进程运行前将所需资源一次性全部分配给它。因此进程在运行过程中不再提出资源请求,从而避免出现堵塞或死锁。

        特点:

          1.执行可能被延迟,所需资源不能全部满足时

          2.应用开销增大:运行前估算资源需求。

          3.资源利用率低:资源被占而不用

        改进:资源分配的单位由进程改为程序步

      有序资源分配法:

        目的:破坏环路条件,使得环路无法构成

        策略:系统中的每个资源分配有一个唯一序号;

           进程每次申请资源时只能申请序号更大的资源

        资源分配策略:

          分配资源时检测资源序号是否符合递增规定

      

  • 相关阅读:
    JavaScript 为字符串添加样式 【每日一段代码80】
    JavaScript replace()方法 【每日一段代码83】
    JavaScript for in 遍历数组 【每日一段代码89】
    JavaScript 创建用于对象的模板【每日一段代码78】
    html5 css3 新元素简单页面布局
    JavaScript Array() 数组 【每日一段代码88】
    JavaScript toUTCString() 方法 【每日一段代码86】
    位运算
    POJ 3259 Wormholes
    POJ 3169 Layout
  • 原文地址:https://www.cnblogs.com/beautiful7/p/12708831.html
Copyright © 2011-2022 走看看