产生条件:
- **互斥条件:**即在一段时间内,一个资源只能被一个进程占用。
- **请求和保持条件:**进程已经获得了某种资源,但又提出了新的资源的要求,而该资源已经被其他进程占有,此时请求进程被阻塞,但对自己保持的资源不放。
- **不可抢占资源:**进程已获得的资源在未使用完成之前不能被其他进程抢占。
- **循环等待条件:**若干进程间形成首尾相接循环等待资源的关系
如何解决死锁
- **预防死锁:**去破坏产生死锁的四个必要条件中的一个或者几个来预防死锁的产生
- **避免死锁:**在资源的动态分配过程中,用某种方法防止系统进入不安全状态,避免死锁的发生。
系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略。 - **检测死锁:**通过检测机构检测出死锁的发生,然后采取适当的措施
- **接触死锁:**当检测到死锁已经发生时,撤销一些进程,回收他们的资源,将其分配给其他进程,使其继续运行.
预防死锁具体细节
1. 破坏请求和保持条件
第一种方法:进程必须一次性申请所有需要的资源,并且系统有足够的资源分配,否则就不分配
这种方法优点是简单,易行,但是会出现严重的浪费资源和进程发生饥饿现象
第二种方法:进程只获得运行初期所需的资源,在运行过程中,将运行完成的资源释放,在申请其他资源
2. 破坏不可抢占条件
将不可抢占的资源变为可抢占的资源,实现复杂,代价大
3. 破坏循环条件
采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,每个进程按编号递增的请求资源,释放则相反,从而破坏环路等待的条件