死锁的定义、产生原因、必要条件、避免死锁和解除死锁的方法

一、死锁产生的原因:
1)、因为系统的资源不足,不能满足进程的资源请求,会导致多个线程同时争夺一个资源
2)、进程运行推进的顺序不合适
3)、资源分配不当,有的进程资源分配太少,会因为争夺资源而陷入死锁
二、死锁产生的场景:
1)、多个线程:彼此申请对方资源不足而导致的死锁,A申请B的锁的时候,因为锁被占用所以会把A挂起等待B释放锁,同时B申请A的 锁,同样因为A的锁锁被占用,B会被挂起等待,都被挂起没有机会释放锁,则进入了死锁。
2)、单个线程:有自己的锁,但是还要申请新锁,在申请新锁的时候,因为所被占用,所以会被挂起等待,但是锁是被自己占用,而自己又被挂起,没机会释放锁,则会进入死锁。
三、死锁产生的4个必要条件:
(1)、互斥:一个资源一次只能被一个进程使用,当该进程使用该资源的时候,其他进程就不能使用,具有独占性;
(2)、请求与保持:一个进程要请求新的资源,但同时对已获得的资源不释放,要等待其他进程释放资源;
(3)、循环等待:若干进程都要申请资源,但是都对已获得的资源不释放,都要等待其他进程释放资源,若干进程陷入循环等待资源;
(4)、不剥夺:进程已获得的资源,在未使用完之前,不能被强行剥夺。
四、这4个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁,因此可以写下如下的预防死锁的方法:
1)、破坏“互斥”条件:就是在系统里取消互斥、若资源一般不被一个进程独占使用,那么死锁是肯定不会发生的,但一般“互斥”条件是无法破坏的。因此,在死锁预防里主要是破坏其他三个必要条件,而不去涉及破坏“互斥”条件。
2)、破坏“请求和保持”条件:在系统中不允许进程在已获得某种资源的情况下,申请其他资源。即要想出一个办法,阻止进程在持有资源的同时申请其他资源。—-方法:所有进程在运行之前,必须一次性地申请在整个运行过程中所需的全部资源。这样,该进程在整个运行期间,便不会再提出资源请求,从而破坏“请求”条件。系统在分配资源时,只要有一种资源不能满足进程的要求,即使其他所需的各种资源都空闲也不分配给该进程,而让该进程的等待。由于该进程在等待期间未占有任何资源,于是破坏了“保持”条件。
该方法的优点:简单易行。且安全
缺点:资源被严重浪费,严重恶化了资源的利用率
五、死锁的解除:
一旦检测出死锁,就应立即采取相应的措施,以解除死锁,解除死锁主要有俩种方法:
1、抢占资源:从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态
2、终止或撤销进程:终止或撤销系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。
总结:
一般情况下,如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该进程会挂起等待别的线程释放锁,然而锁正是被自己占用着的,该进程又被挂起而没有机会释放锁,因此就永远处于挂起等待状态了,这就叫做死锁(Deadlock)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值