死锁概念
死锁的必要条件
-
互斥
- 任何时刻只有一个进程使用一个资源实例
-
持有并等待
- 进程保持至少一个资源,并正在等待其他进程持有的资源
-
非抢占
- 进程只有在资源使用后自愿释放
-
循环等待成环
死锁的处理方法
- 死锁预防
- 死锁避免
- 死锁检测和恢复
死锁预防:限制申请方式
使得必要条件不满足
-
互斥
- 把互斥的资源封装成可以同时访问
-
持有并等待
- 进程申请资源时,保证其不拥有其他资源
- 仅允许进程最开始执行时,一次性申请所有资源
- 资源利用率低
-
非抢占
- 如果进程请求资源不能立即分配,则释放已有资源
- 只有进程能同时获取到所有资源时,才予以分配
-
循环等待
- 对资源进行排序,要求进程按顺序请求资源
死锁避免
先验,判断是否会出现死锁,不出现才分配
- 要求进程声明所需资源的最大数目
- 限定提供与分配的资源数量,确保进程满足最大需求
- 动态检测资源分配状态,确保不会出现环形等待
银行家算法
属于死锁避免的方法
- 客户申请贷款时,最大贷款金额,完成项目后按时归还
- 客户贷款不超过最大银行拥有的最大金额时,尽量满足