死锁-死锁预防、死锁避免(资源分配图与银行家算法)、死锁检测、死锁解除

本文详细介绍了死锁的概念,包括死锁的四个必要条件和解决死锁的四种方法:预防、避免、检测和解除。重点讨论了死锁预防中的资源分配策略,如打破互斥、占有并等待、非抢占和循环等待条件,并提到了银行家算法作为死锁避免的实例。同时,介绍了使用JConsole和JStack工具检测死锁的方法。

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

1 死锁

什么是死锁
    通俗的讲,就是两个或多个进程无限期的阻塞、相互等待的一种状态。比如哲学家进餐问题。
死锁产生的四个必要条件
    互斥:至少有一个资源必须属于非共享模式,即资源一次只能被一个进程使用;
    占有并等待:进程自己有一部分资源,又想得到别人占有的资源;
    非抢占:进程不能被抢占,即资源只能被进程在完成任务后自愿释放
    循环等待:若干进程之间形成一种头尾相接的环形等待资源关系 ;
    解决死锁的基本方法主要有 预防死锁、避免死锁、检测死锁、解除死锁 、鸵鸟策略 等。

2 死锁预防

    基本思想就是:打破死锁产生的四个必要条件之一。
    打破互斥条件:允许进程同时访问某些资源。但是,有些资源是不能被多个进程所共享的,这是由资源本身属性所决定的,因此,这种办法通常并无实用价值。
     打破占有并等待条件:可以实行资源预先分配策略(进程在运行前一次性向系统申请它所需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行;只有当系统能满足当前进程所需的全部资源时,才一次性将所申请资源全部分配给该线程)或者只允许进程在没有占用资源时才可以申请资源(一个进程可申请一些资源并使用它们,但是在当前进程申请更多资源之前,它必须全部释放当前所占有的资源)。但是这种策略也存在一些缺点:在很多情况下,无法预知一个进程执行前所需的全部资源,因为进程是动态执行的,不可预知的;同时,会降低资源利用率,导致降低了进程的并发性。
     打破非抢占条件:允许进程强行从占有者哪里夺取某些资源。这种预防死锁的方式实现起来困难,会降低系统性能。
     打破循环等待条件:实行资源有序分配策略。对所有资源排

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值