zoukankan      html  css  js  c++  java
  • 死锁

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

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

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

    死锁的起因

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

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

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

    死锁预防策略:

       死锁的必要条件:

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

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

        3.部分分配条件:

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

          区别于 全部分配

        4.环路条件:

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

    解决死锁的策略

      预防死锁

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

          破坏互斥条件(难)

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

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

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

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

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

      避免死锁:

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

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

        缺点:实现比较难

      检测死锁和恢复死锁:

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

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

           2.恢复方式靠人工

      预先静态分配法:

        目的:破坏部分分配条件

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

        特点:

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

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

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

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

      有序资源分配法:

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

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

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

        资源分配策略:

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

      

  • 相关阅读:
    hdu 4520 小Q系列故事——最佳裁判 解题报告
    hdu 4505 小Q系列故事——电梯里的爱情 解题报告
    hdu 4524 郑厂长系列故事——逃离迷宫 解题报告
    JAVA泛类型示例
    Perl多进程处理Web日志
    Perl单线程日志分析工具
    Perl DBI使用实例
    JAVA(时间对比排序程序)
    软件通信之HTTP通信协议
    Android中级之网络数据解析一之Json解析
  • 原文地址:https://www.cnblogs.com/beautiful7/p/12708831.html
Copyright © 2011-2022 走看看