面试——死锁和避免死锁

本文详细阐述了死锁的概念,包括其四个必要条件,以及如何通过破坏这些条件来避免死锁。讨论了共享资源、预先分配、超时机制和资源编号策略,并介绍了死锁检测与恢复的方法。
摘要由CSDN通过智能技术生成

死锁是指两个或多个进程(或线程)在互相请求对方持有的资源时,由于资源的互斥性和占有且等待条件,导致它们无法继续执行,进而导致系统无法进行下去的一种状态。

死锁的四个必要条件是:

  1. 互斥条件:至少有一个资源必须处于非共享模式,即一次只能被一个进程使用。
  2. 持有并等待条件:一个进程可以持有一个资源并等待另一个资源,而该资源又被另一个进程所持有。
  3. 非抢占条件:已经分配的资源不能被强制性地抢占,只能由持有它的进程显示释放。
  4. 循环等待条件:存在一组进程(或线程),每个进程都在等待列表中等待下一个进程所持有的资源。

为了避免死锁,可以采取以下几种策略:

  1. 破坏互斥条件

    • 尽量使用共享资源,减少互斥资源的数量。
  2. 破坏持有并等待条件

    • 一种常见的方式是采用资源预先分配的策略,即进程在开始执行前一次性申请所有需要的资源,如果无法满足,就不分配任何资源。
  3. 破坏非抢占条件

    • 当一个进程在请求资源时得不到满足,它必须释放已经持有的资源,防止资源被长时间占用。可以采用超时机制,如果请求资源的操作在一定时间内无法完成,就放弃请求并释放已经持有的资源。
  4. 破坏循环等待条件

    • 给资源编号,要求进程按照编号递增的顺序申请资源,当一个进程需要申请一个资源时,要求先释放所有已经申请的资源再重新申请。这样就打破了循环等待条件。
  5. 死锁检测与恢复

    • 系统周期性地检测是否有死锁的发生,一旦检测到死锁,就采取相应的措施进行恢复,例如剥夺资源、杀死进程等。

以上是几种避免死锁的常见策略,不同的场景可能采用不同的组合来尽量减少死锁的发生。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值