死锁的必要条件和避免算法1、死锁的概念两个线程为了保护两个共享资源而使用了两个排他锁,当他们被不恰当地应用时,造成互相等待对方解锁避免了没有外力就不能执行
本质原因
1、系统资源有限。
2、进程推进顺序不合理。
在满足以下四个条件之前不会发生死锁:
3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /排他条件:多个线程不能同时使用同一个资源
有条件等待:
A获得资源1,并且正在申请资源2,此时资源2被C持有,A进入等待状态,但是死锁
不可剥夺条件:
如果线程已经拥有资源,请单击互斥条件
环路等待条件:
发生死锁时,请参阅持有并等待条件
2、死锁预防:不可剥夺条件最常见可行的是环路等待条件有序降低资源运行速度。
破坏“拿着等”的条件
方法1 :静态分配,每个进程在运行开始时申请他所需的全部资源。 虽然简单安全,但资源利用率下降,出现饥饿现象。
方法2 )确保进程在运行初期只获得所需资源,然后开始运行,在运行过程中逐步变为A在等待的时候不会释放自己持有的资源1后再请求新资源。 这样可以提高资源利用率,也减少进程饥饿问题。
破坏“不可剥夺”的条件
如果一个进程无法获得所有必需的资源,它将处于等待状态,等待过程中占用的资源将被隐式释放并重新添加到系统的资源列表中,以供其他进程使用。
只有重新获取自己的原始资源和新申请的资源,等待的进程才能重新启动并运行。
成本复杂,重复申请和释放会增加进程的循环周期,也会影响系统吞吐量。
在自己使用完之前不能被其他线程获取死锁避免利用额外的检查信息来确定在分配资源时是否发生死锁,并且仅在不发生死锁时分配资源。
两种解决方法:
1 .根据一个进程的要求发生死锁时,该进程不会启动
2、如果一个流程的资源增加请求会导致死锁,则拒绝该申请。
两个线程获取资源的顺序构成了环形链常用死锁释放方法:
1、抢占资源:从一个或多个过程抢占足够数量的资源并分配给死锁过程,以消除死锁情况。
2、终止(或撤消)进程终止或撤消系统中的一个或多个死锁进程,直到死锁状态消失。