四个必要条件:
互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞,对已获得的资源保持不放。
不剥夺条件:进程获得的资源,在未使用完之前,不可以强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系
处理死锁:
死锁的预防:破坏四个死锁的条件,但是都没一定的局限性,相应系统的执行效率
死锁的避免:银行家算法。
死锁的解决:
(1) 最简单,最常用的方法就是进行系统的重新启动,不过这种方法代价很大,它意味着在这之前所有的进程已经完成的计算工作都将付之东流,包括参与死锁的那些进程,以及未参与死锁的进程。
(2) 撤消进程,剥夺资源。终止参与死锁的进程,收回它们占有的资源,从而解除死锁。这时又分两种情况:一次性撤消参与死锁的全部进程,剥夺全部资源;或者逐步撤消参与死锁的进程,逐步收回死锁进程占有的资源。一般来说,选择逐步撤消的进程时要按照一定的原则进行,目的是撤消那些代价最小的进程,比如按进程的优先级确定进程的代价;考虑进程运行时的代价和与此进程相关的外部作业的代价等因素。