死锁产生的必要条件

本文详细阐述了死锁的概念及其四个必要条件:互斥、占有并等待、非抢占和循环等待。介绍了四种处理死锁的方法:预防、避免、检测和恢复。预防策略包括对资源分配的限制;避免策略如资源分配图算法和银行家算法确保系统安全;检测算法通过等待图识别死锁;恢复策略涉及进程终止和资源抢占。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

死锁



一、死锁产生的必要条件

  1. 互斥
  2. 占有并等待:一个进程必须占有至少一个资源,并等待另一资源,而该资源为其他进程所占有
  3. 非抢占
  4. 循环等待

二、死锁处理方法

1.死锁预防:确保至少有一个死锁必要条件不成立

  • 互斥:通常不能通过否定互斥条件来预防死锁。
  • 占有并等待:必须保证当一个进程申请一个资源时,不能占有其他资源。一个进程可以申请一些资源并使用它们,然而在它申请更多其他资源之前必须释放其现已分配的所有资源。
  • 非抢占:可以使用如下协议——如果一个进程占有资源并申请另一个不能立即分配的资源,那么其现已分配的资源都可被抢占。
  • 循环等待:一个确保此条件不成立的方法是对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请资源。

2.死锁避免

  • 资源分配图算法
    • 资源分配图:节点结合包括系统活动进程和系统所有资源类型,申请边和分配边;
    • 如果分配图没有环,那么系统就没有进程死锁。如果分配图有环,那么可能存在死锁。
  • 银行家算法:适用于每种资源类型有多个实例的资源分配系统。

3.死锁检测

  • 当系统既不采用死锁预防也不采用死锁避免算法,那么可能会出现死锁,在这种环境下,系统应该提供:
    • 一个用来检测系统状态从而确定是否出现了死锁的算法
    • 一个用来从死锁状态恢复的算法
    • 等待图:当且仅当等待图中有一个环,系统存在死锁

4.死锁恢复

  • 进程终止:终止所有死锁进程或一次终止一个进程直到取消死锁循环为止;
  • 资源抢占:逐步从进程抢占资源给其他进程使用,直到死锁环被打破为止,如果要求使用抢占来处理死锁,那么有三个问题需要处理:
    • 选择一个牺牲品:抢占哪些资源和哪个进程
    • 回滚:如果从一个进程那里抢占了一个资源,那么应对该进程回滚到某个安全状态
    • 饥饿:如何保证资源不会总是从一个进程中被抢占
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值