死锁的定义
死锁(Deadlock),指的是进程死锁,是个计算机技术名词。它是操作系统或软件运行的一种状态:在多任务系统下,当一个或多个进程等待系统资源,而资源又被进程本身或其它进程占用时,就形成了死锁。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象。(来自百度百科)
死锁形成的必要条件
-
1.互斥条件:一个资源每次只能被一个执行流使用,要么已经分配给了一个进程,要么就是可用状态。
-
2.请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不放。
-
3.不剥夺条件:一个执行流已获得的资源,在末使用完之前,不能强行剥夺,只能被占有它的进程显示地释放。
-
4.循环等待条件:有两个或两个以上的进程组成一个环路,该环路中的每个进程都在等待下一个进程所占有的资源,这若干执行流之间形成一种头尾相接的循环等待资源的关系。
死锁产生的原因
- 1.竞争资源引起进程死锁
1)可剥夺资源和不可剥夺资源
2)竞争不可剥夺资源
3)竞争临时资源 - 2.进程推进顺序不当引起死锁
1)进程推进顺序合法
2)进程推进顺序非法
死锁的处理方法
1.预防死锁。
- 这是一种较简单和直观的事先预防的方法。方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。预防死锁是一种较易实现的方法,已被广泛使用。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。
2.避免死锁。
-
该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
-
破坏死锁的四个必要条件
-
加锁顺序一致
-
避免锁未释放的场景
-
资源一次性分配
3.检测死锁。
- 这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除掉。
检测方法包括定时检测、效率低时检测、进程等待时检测等。
4.解除死锁。
- 这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。死锁的检测和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
避免死锁算法
死锁检测算法
银行家算法