死锁学习笔记
学习完的几点个人感受
- 个人推荐的学习思路
- 先看死锁概念和四个必要条件 -> 看 wikipedia
- 然后大概的看一下哲学家就餐问题 -> 看 wikipedia
- 带着对哲学家问题的疑问,看处理死锁的几种方法 -> 可以看下面给的视频的某些章节
- 然后自己梳理死锁(我在下面也有梳理一下)
- 网上已有博客不是很靠谱:如果对死锁很不了解,推荐看 这个课程
- 课程优点:讲的比较完整,不像博客,看完一堆疑问
- 课程缺点:视频时间加起来还挺长的,可以针对性的看
- 进程和线程都会有死锁的现象,也就是说笔记中词语「进程」可以替换为「线程」(除开个别特意声明了他们区别的地方)
- 不要把
竞态条件
和死锁
搞混了(只有多线程才会有竞态条件的概念,进程没有)。 (这两个概念其实差很远,不过我自己当初确实没搞明白) - wikipedia 讲的东西特别有启发/延展性,比如它涉及到 lock-free algorithm,还也很有价值
死锁重点知识梳理
- 死锁的概念:a deadlock is a state in which each member of a group is waiting for some other member to take action, such as sending a message or more commonly releasing a lock
- 这种情况并不是死锁:A 占有资源 1,B 一直等待资源 1。(B 只是暂时等待而已)
- 这种情况可以说是死锁:A 进程占了资源 1,B 进程占了资源 2, A 等待资源 2,B 等待资源 1
- 死锁出现的情况
- 系统资源不足
- 锁、信号量使用不当
- 死锁出现的四个必要条件(重要)
- 资源互斥
- 占有一个资源,等待另外一个资源
- 资源不可以被抢占
- 有一个循环等待链
- 死锁处理办法
- 预防死锁 -> 破坏四个必要条件之一 静态
- 用一个进程专门管理资源
- 一次占有所有资源 / 或者申请失败就释放自己的资源
- 允许资源抢占 - 进程优先级
- 让资源申请按照一定顺序进行
- 避免死锁 -> 控制资源分配策略达到避免的效果 动态
- 银行家算法 zh_wikipedia
- 预防死锁 -> 破坏四个必要条件之一 静态
- 死锁检测与解除(好像不太重要,方法也挺无脑)
- 死锁检测方法
- 死锁接触方法
- 撤销所有死锁进程
- 进程回退再启动
- 哲学家就餐问题 zh_wikipedia(重要,贯通整个知识链)
相关知识
- 死锁、活锁、饥饿三者区别(重要)
- 资源分配图(用图来帮助分析死锁)
涉及到的一些概念/经典算法/经典问题
(ps: 这些算法和问题其实都特别容易懂,如果理解了死锁的话)
- 死锁
- 银行家算法
- 哲学家就餐问题
Comments