• 50 怎么防止死锁?


    怎么防止死锁?

    答:

    怎么防止死锁

    • 尽量使用 tryLock(long timeout, TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),设置超时时间,超时可以退出防止死锁。

    • 尽量使用 Java. util. concurrent 并发类代替自己手写锁。

    • 尽量降低锁的使用粒度,尽量不要几个功能用同一把锁。

    • 尽量减少同步的代码块。

    打破四个必要条件之一

    • 打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造。

    • 打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源。

    • 打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则运行,不然就等待,这样就不会占有且申请。

    • 打破循环等待条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源。
       

    原文链接: https://blog.csdn.net/syilt/article/details/90576501 (怎么防止死锁)
    原文链接: https://baike.baidu.com/item/死锁/2196938#3 (打破四个必要条件之一)
    原文链接: https://www.iteye.com/blog/uule-2435485 (银行家算法)
     

    一张图一句话明 银行家算法

    银行家算法

    银行家算法是一个避免死锁的著名算法,它是以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

    一句话:当一个进程申请使用资源的时候,银行家算法通过【先 试探 分配给该进程资源】,然后【通过安全性算法判断分配后的系统是否处于安全状态】,若不安全则试探分配作废,让该进程继续等待。

    当一进程提出资源申请时,银行家算法执行下列步骤以决定是否向其分配资源:

    1)检查该进程所需要的资源是否已超过它所宣布的最大值。

    2)检查系统当前是否有足够资源满足该进程的请求。

    3)系统试探着将资源分配给该进程,得到一个新状态。

    4)执行安全性算法,若该新状态是安全的,则分配完成;若新状态是不安全的,则恢复原状态,阻塞该进程。

    假设资源P1申请资源,银行家算法先试探的分配给它(当然先要看看当前资源池中的资源数量够不够),【若申请的资源数量小于等于Available,然后接着判断分配给P1后剩余的资源,能不能使进程队列的某个进程执行完毕】,【若没有进程可执行完毕,则系统处于不安全状态】(即此时没有一个进程能够完成并释放资源,随时间推移,系统终将处于死锁状态)。

    若有进程可执行完毕,则假设回收已分配给它的资源(剩余资源数量增加),把这个进程标记为可完成,并继续判断队列中的其它进程,若所有进程都可执行完毕,则系统处于安全状态,并根据可完成进程的分配顺序生成安全序列(如{P0,P3,P2,P1}表示将申请后的剩余资源Work先分配给P0–>回收(Work+已分配给P0的A0=Work)–>分配给P3–>回收(Work+A3=Work)–>分配给P2–>······满足所有进程)。

  • 相关阅读:
    自定义WordPress文件上传路径
    PHP Warning: preg_match(): JIT compilation failed: no more memory in
    Mac下PHP7.1+Nginx安装和配置
    bootstrap modal插件弹出窗口如何限制最大高度,并且在内容过多时可以滚动显示
    Language Tool ,a plugin for TeXStudio
    平均值mean,众数mode,中值median 和 标准差stddev
    LaTeX Software & Manuals
    MAFFT多重序列比对--(附比对彩标方法)
    Markdown语法 (中文版)
    在64位系统上不能安装Matlab notebook的解决方案
  • 原文地址:https://www.cnblogs.com/ynzj123/p/12863028.html
Copyright © 2020-2023  润新知