什么是死锁
(1) 打个比方,假设有 P1 和 P2 两个进程,都需要 A 和 B 两个资源,现在 P1 持有 A 等 待 B 资源,而 P2 持有 B 等待 A 资源,两个都等待另一个资源而不肯释放资源,就 这样无限等待中,这就形成死锁,这也是死锁的一种情况。给死锁下个定义,如 果一组进程中每一个进程都在等待仅由该组进程中的其他进程才能引发的事件, 那么该组进程是死锁的。
(2) 竞争不可抢占资源引起死锁
(3) 也就是我们说的第一种情况,而这都在等待对方占有的不可抢占的资源。
死锁的发生必须具备4个条件
(1) 互斥条件: 其实就是进程对所分配到的资源进行排它性使用,是指在一段时间内 某个资源只能由一个进程占用。如果此时还有其它进程请求资源,那么其它线程 只能等待,直到占有资源的进程用完被释放掉。
(2) 请求和保持条件: 指进程已经保持至少一个资源,但又提出了新的资源请求,而 该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保 持不放。
(3) 不剥夺条件: 指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用 完时由自己释放。
(4) 环路等待条件: 指在发生死锁时候,一定存在一个进程相当于资源的环形链,也 就是进程的集合像{P0,P1,P2,···,Pn}中的 P0 正在等待一个 P1 占用的资 源;P1 正在等待 P2 占用的资源,……,Pn 正在等待已被 P0 占用的资源
如何避免死锁四种方法
(1) 检测死锁
这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安 全区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构, 及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当 措施,从系统中将已发生的死锁清除掉。
(2) 解除死锁。
这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程 从死锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。 死锁的检测和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现 上难度也最大。