zoukankan      html  css  js  c++  java
  • 线程死锁

    一、死锁概念:

        指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外部处理作用,它们都将无限等待下去

    二、死锁产生的四个必要条件

      1.互斥条件:互斥就是进程在某一段时间独享资源(有临界资源的概念在里面)

      2.请求和保持条件:一个进程在请求资源而阻塞的时候,对自己已获得的资源依旧保持占有

      3.不可剥夺条件:进程已获得资源,在未使用完之前,不能强行剥夺

      4.环路等待条件:几个进程之间在等待或者请求资源的时候形成的一种环形关

    三、一般产生死锁的原因

      1.系统资源不足

      2.资源分配不当(银行家算法)

      3.进程推进顺序不当

    三、死锁的避免策略

      死锁的代价是非常大的,有时候很难检测排查,因此需要在编程过程中尽可能的避免发生死锁。编程中为了避免死锁应该遵循如下策略

    1. 在编写多线程程序之前,首先编写正确的程序,然后再移植到多线程。
    2. 时刻检查自己写的程序有没有在跳出时忘记释放锁。
    3. 如果自己的模块可能重复使用一个锁,建议使用嵌套锁
    4. 对于某些锁代码,不要临时重新编写,建议使用库里面的锁,或者自己曾经编写的锁。
    5. 如果某项业务需要获取多个锁,必须保证锁的按某种顺序获取,否则必定死锁。
    6. 编写简单的测试用例,验证有没有死锁。
    7. 编写验证死锁的程序,从源头避免死锁。
    安心下来做技术,笑是最大的福气
  • 相关阅读:
    Delphi单元文件之-防止程序重复执行
    cxGrid使用汇总2
    Delphi数组复制
    cxGrid使用汇总1
    Delphi XE5 android 获取网络状态
    xe5 android sample 中的 SimpleList 是怎样绑定的
    XE5 Android 开发数据访问手机端 解决乱码的办法
    设计模式之代理模式
    设计模式之单例模式及原型模式
    设计模式之工厂模式
  • 原文地址:https://www.cnblogs.com/JN-PDD/p/6945103.html
Copyright © 2011-2022 走看看