死锁产生的原因以及解决方法

死锁:当一组进程中的所有进程都在等待一个事件(等待请求事件的释放),而只有这组进程中的其它阻塞的进程才可以触发该事件。这时就称这组进程发生死锁。


死锁产生的原因:

(1)因为系统资源不足

(2)进程运行推进的顺序不合适

(3)资源分配不当


死锁产生的条件:

(1)互斥:一次只有一个进程可以使用一个资源。其它进程不能访问已分配给其它进程的资源。

(2)占有且等待:当一个进程在等待分配得到其它资源的时,其继续占有已经分配得到的资源。

(3)非抢占:当某个进程持有资源时,别的进程不能抢占该资源

(4)循环等待:若干进程之间形成一种头尾相接的环形等待资源关系


死锁预防:

死锁预防通过破环任一个产生死锁的条件,从而预防死锁的产生。不能通过破坏条件1,预防产生死锁。条件1是死锁的基础,如果访

问资源要求互斥,操作系统必须支持互斥。 

<1>破坏条件2,要求进程一次性请求完它所需要的资源,并且阻塞这个进程,直到所有请求都同时满足。缺点:效率低

进程可能被阻塞很长时间,等待进程获取完它所需要的资源;分配给一个进程的资源,它可能很长时间不用,在此期间内,别的进程也不能获取。

另一个问题是一个进程可能事先并不知道它所需要的所有资源。

<2>破坏条件3,如果占有某些资源的进程请求申请资源失败时,释放其占有的资源;如果当前进程申请访问的资源被

另一个进程占用时,操作系统可以抢占另一个进程,要求它释放。 

<3>破坏条件4,定义资源的有序分配顺序,不产生循环等待。缺点:使进程执行速度变慢


死锁避免 :
死锁避免允许死锁产生的条件,通过分析新的资源请求,确定它是否会产生死锁,只有在不可能产生死锁时才同意该请求。 
<1>如果一个进程的请求会导致死锁,则不启动该进程; 
<2>如果一个进程请求加载的资源会导致死锁,则不分配该资源。


扩展~~

自旋锁 
同一时刻只有一个进程能够获得自旋锁,其他试图获得自旋锁的进程将一一直尝试获得锁(即自旋),直到获得该锁。自旋锁实质上是内存上的一个整数,任何线程进入临界区之前都必须检查该整数,如果该值是0,则线程设置该值为1,然后进入临界区,出临界区后,将该值设置为0。如果该值非0,则该进程继续检查该值,直到它为0。

自旋锁的缺点:在锁外面的线程以忙等待的方式持续执行,因此,自旋锁在获得锁需要的等待时间较短时会很高效。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值