如两个进程分别等待对方占有的资源,于是两个进程都不能执行而处于等待状态,此线程称为死锁。
进程的三态模型
就绪态 ↔ \leftrightarrow ↔ 运行态 → \to → 等待态 → \to → 就绪态
进程的五态模型
创建进程 → \to → 就绪态 ↔ \leftrightarrow ↔ 执行态 → \to → 等待态 → \to → 就绪态 (执行态 → \to → 结束进程)
进程的七态模型
添加 挂起就绪态 和 挂起等待态。
进程创建后可能是就绪态,也可能是挂起就绪态。
死锁的四个条件
(1)互斥条件
(2)占有和等待
(3)不可剥夺
(4)循环等待
前三个条件是必要条件,但不是充分条件。第四个条件是前三个条件共同作用的结果,不会单独存在。
死锁防止
破坏(1):使得临界资源可同时访问。
破坏(2):静态分配。在程序执行前就将所需的全部资源都分配。
破坏(3):剥夺调度。
破坏(4):层次分配,有序分配。
死锁防止会降低系统的并发度,导致低效的资源利用率。
死锁避免
银行家算法
它允许死锁的前三个条件存在,但是可以通过算法避免循环等待。
死锁的恢复和检测