死锁学习笔记

死锁是多进程环境下的一种系统状态,当两个或更多进程因争夺资源而相互等待,无法继续执行。其产生原因包括资源竞争和进程调度不当。四个必要条件为互斥、不剥夺、请求保持和循环等待。预防死锁的方法包括破坏这些条件,如强制资源释放、一次性申请所有资源和资源线性申请等。理解并避免死锁对于系统稳定至关重要。
摘要由CSDN通过智能技术生成

死锁

定义:

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种堵塞的现象。在没有外力的作用下,它们将无法推进下去,此时系统便处于死锁状态或者产生了死锁。举个例子,当线程 A 持有独占锁 a ,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b ,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁。

产生原因:
  • 竞争资源 - 共享资源数量不满足各个进程的需求
  • 进程调度顺序不当
必要条件:(只有全部满足这四种必要条件才会导致死锁,缺一不可)
  • 互斥条件:线程要求对所分配的资源进行 排他性控制 ,即在一段时间内某资源仅为一个线程所占有。此时若有其他线程请求该资源,则请求线程只能等待。
  • 不剥夺条件:线程所获得的资源在未使用完毕之前,不能被其他线程强行夺走,即只能由获得该资源的线程自己来释放(只能是主动释放)
  • 请求保持条件:线程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他线程所占用,此时请求线程被堵塞,但对自己已获得的资源保持不放。
  • 循环等待条件:存在一种线程资源的循环等待链,链中每一个线程已获得的资源同时被链中下一个资源所请求。
预防死锁的方法

由于导致死锁的四个必要条件,我们只需要破坏其中一个或者多个必要条件,就能够避免死锁的产生。

1、破坏不可剥夺条件
  • 当一个进程请求新的资源得不到满足时,必须释放占有的资源
  • 进程运行时占有的资源可以被释放,意味着可以被剥夺
2、破坏请求保持条件
  • 系统规定进程运行之前,一次性申请所有需要的资源
  • 进程在运行期间不会提出资源请求。
3、破坏循环等待条件
  • 可用资源线性排序,申请必须按照需要递增申请
  • 线性申请不再形成环路,从而破坏循环等待条件
  • 如 A -> B -> C -> D,想要获得 C 资源,必须先申请 A 资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值