文章目录
检测与恢复策略
- 检测与恢复策略
- 死锁的修复策略总结
检测与恢复策略: 一段时间检测是否有死锁, 如果有剥夺某一个资源 ,打开死锁.
死锁的检测算法 : 允许发生死锁. 每次调用锁的时候 , 都做记录,用图的数据结构来记录. 根据有向图的方向, 定期检查 "锁的调用链路"中是否存在环路.
一旦发生死锁, 用死锁恢复机制进行恢复.
- 恢复方法1 : 进程终止 逐个的终止线程, 直到死锁消除为止. 终止的顺序
- 根据优先级终止, 看是前台的交互更加的重要, 还是后台的处理更重要
- 根据已经占用的资源和 还需要的资源来决定某个哪个线程终止. 例如某个线程还只需一点资源就结束任务了, 那么就不终止此线程.
- 根据线程已经运行的时间来决定某个哪个线程终止. 例如某个线程已经执行了很长的时间了, 那么就终止其他短时间的线程来帮助此长时间运行的线程完成任务.
- 恢复方法2 : 资源抢占(资源回收) 资源抢占 是指把已经分发出去的锁资源给收回来. 让线程回退几步, 回收锁资源, 这样就不用终止整个线程, 成本较低. 缺点: 可能某一个线程, 一直被抢占, 即一直被锁资源给收回来了, 那么就会造成饥饿,一直得不到运行.
- 避免策略: 哲学家就餐换手的方案, 让某一个哲学家从相反的方向拿筷子
- 检测与恢复策略: 一段时间检测是否有死锁, 如果有剥夺某一个资源 ,打开死锁. 两种办法恢复死锁. a. 进程终止 b. 资源抢占(资源回收)
- 鸵鸟策略 (不推荐) :只有在出现死锁的时候, 才进行处理死锁