一、死锁原理
死锁可以被定义为一组竞争系统资源或互相通信的进程间的“永久”阻塞。当一个进程集合中所有进程都在等待请求资源的分配,而只有在进程集合中的其他阻塞的进程才能触发该事件。这时就称为进程死锁。
如图Ra,Rb占有一个单位资源,当P1占有Rb 同时申请Ra,P2占有Ra,同时申请Rb,两个进程互相都在请求对方占有的唯一资源。发生死锁。
二、死锁条件
若要发生死锁,必定出现四个条件:
1.互斥:一次只有一个进程可以使用一个资源,其他进程不能访问已分配给该进程的资源。
2.占有切等待:当一个进程在等待分配得到其他资源时,其继续占有已被分配的资源。
3.非抢占:不能强行抢占别的进程的资源,必须等待。
4.循环等待:存在一个封闭的进程链。
三、死锁预防
要想预防死锁必须从从产生死锁的条件入手。
互斥性,基本上是不可禁止的。预防占有切等待,可以尝试一次性请求好所有资源,并且阻塞到该进程所有请求都满足,但是这种做法效率低。有很多种办法可以预防非抢占式。比如说如果占有某些资源的一个进程进行进一步资源请求被拒绝。
四、死锁避免
两个避免死锁的方式:
如果一个进程的请求会导致死锁,则不启动该进程。
如果一个进程增加资源的请求会导致死锁,则不请求该资源。
死锁问题
最新推荐文章于 2024-07-01 14:06:48 发布