死锁的产生预防处理解锁


死锁是啥?
想象一下,几个小伙伴在玩抢椅子游戏,但是每个人都抱着椅子不放手,结果大家都动不了,这就是死锁。在电脑里,如果几个程序因为抢资源(比如打印机或者内存)而互相卡住,谁也动不了,这种情况也叫死锁。
死锁怎么来的?
死锁通常是因为几个原因:
资源不够分,大家都想要。
程序运行的顺序乱了,没有按照正确的步骤来。
有些资源只能一个程序用,别人不能用,这叫互斥。
程序用了资源后,不用完就不放手。
程序之间形成了一个圈,你等我,我等他,结果大家都在等。
怎么对付死锁?
对付死锁有几个招数:
预防:就是提前破坏死锁形成的条件。比如,可以让程序一次性要完所有需要的资源,或者规定资源使用的顺序。
避免:用一些聪明的办法,比如银行家算法,来预测会不会出现死锁,如果预测到就提前调整。
检测和解除:如果死锁已经发生了,就要及时检测出来,然后采取措施。比如:
把一些程序的资源抢过来,给其他卡住的程序用。
直接关掉一些程序,把资源释放出来。
让一些程序回到之前的状态,把资源先放掉,等不卡的时候再用。
死锁和其他问题有啥不同?
死锁:就是大家都在等,但是谁也等不到。
饥饿:一个程序老是得不到资源,就像饿肚子一样。
死循环:程序在一个圈里跑来跑去,就是跑不出来。
简单来说,死锁就像是交通堵塞,大家都在等,但是没有交警来指挥,结果就是谁也动不了。要解决这个问题,就得提前规划好,或者出现堵车后及时处理。
 

知识点链接


死锁的概念
死锁是多个进程因竞争资源而陷入的一种僵局,如果没有外部干预,这些进程将无法继续执行。
死锁产生的原因
系统资源的竞争:多个进程争夺有限的资源。
进程推进顺序非法:进程请求资源的顺序不当。
死锁产生的必要条件
互斥条件:进程对分配的资源进行排他性控制。
不可剥夺条件:进程在使用资源期间,资源不能被其他进程夺走。
请求并保持条件:进程已持有至少一个资源,并请求其他资源,但这些资源已被占用,进程等待但不释放已持有的资源。
循环等待条件:存在一个资源请求的循环链,每个进程都在等待下一个进程释放资源。
死锁的处理策略
死锁预防:通过破坏上述四个必要条件中的一个或几个来防止死锁。
破坏互斥条件:在某些情况下,允许资源被非互斥访问。
破坏不可剥夺条件:允许系统在必要时从进程中回收资源。
破坏请求并保持条件:要求进程一次性申请所有需要的资源。
破坏循环等待条件:通过资源分配的全局顺序来避免循环等待。
死锁避免:在资源分配时采用算法(如银行家算法)来预测和避免进入不安全状态。
系统安全状态:系统能够满足每个进程的最大资源需求,使进程能够完成。
银行家算法:通过计算资源分配的不同方式来预测系统是否安全。
死锁的检测和解除
使用资源分配图来检测死锁。
死锁定理:通过消去满足分配条件的进程的边来判断系统是否死锁。
死锁解除方法:
资源剥夺法:抢占死锁进程的资源并分配给其他进程。
撤销进程法:根据优先级撤销部分或全部死锁进程。
进程回退法:让进程回退到安全状态并释放资源。
死锁、饥饿、死循环的区别
死锁:进程互相等待对方资源,导致无法推进。
饥饿:某进程因长期得不到所需资源而无法推进。
死循环:进程在执行过程中无法跳出某个循环。
 

 

相关推荐

  1. 产生预防理解

    2024-06-14 17:00:02       7 阅读
  2. 产生原因和预防

    2024-06-14 17:00:02       42 阅读
  3. 定义以及产生必要条件,处理

    2024-06-14 17:00:02       20 阅读
  4. 预防 MySQL 策略

    2024-06-14 17:00:02       14 阅读
  5. MySQL产生根本原因及解决方法

    2024-06-14 17:00:02       21 阅读
  6. 2024-06-14 17:00:02       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-14 17:00:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-14 17:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-14 17:00:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-14 17:00:02       20 阅读

热门阅读

  1. 电压kV为什么k要小写,原因你知道吗?

    2024-06-14 17:00:02       7 阅读
  2. 男人圣经 14

    2024-06-14 17:00:02       7 阅读
  3. AI 到底是什么?

    2024-06-14 17:00:02       8 阅读
  4. ApplicationContextAware使用【工具类】

    2024-06-14 17:00:02       8 阅读
  5. TF-IDF(Term Frequency-Inverse Document Frequency)算法

    2024-06-14 17:00:02       7 阅读
  6. 详解 Flink Table API 和 Flink SQL 之函数

    2024-06-14 17:00:02       8 阅读
  7. 测评要求+基本措施+对应产品

    2024-06-14 17:00:02       7 阅读
  8. 保险丝的选型

    2024-06-14 17:00:02       9 阅读
  9. Django的‘通用视图TemplateView’

    2024-06-14 17:00:02       5 阅读
  10. RSA学习

    RSA学习

    2024-06-14 17:00:02      5 阅读
  11. 【实践】Filebeats的尝鲜

    2024-06-14 17:00:02       7 阅读
  12. Selenium入门之环境搭建

    2024-06-14 17:00:02       9 阅读
  13. ES6+Vue

    ES6+Vue

    2024-06-14 17:00:02      6 阅读