有一次给一群码农演讲,我喷口水喷了快一个小时,说spinlock等的正确使用以及死锁的原因。下面有个人突然问,“老师,请问什么叫死锁?”。

我心里想,把这个人拉出去枪毙一万次 :-) ,你这样是怎么做了几年码农的?这样民族自强的机会在哪里?但是我还是耐心地跟他解答了。我跟他说:“死锁就是我们两约好一起去跳楼,然后我们都跑到了顶层88楼的天台,然后我跟你说一句,'you jump, I jump',你也跟我说一句'you jump, I jump',最后你特马也没jump,我特马也没jump,所以跳楼这个壮举就算是因为死锁而永久地搞不下去了。”然后我问他明白了没有,他说:“没听懂”。这个时候我狠不得把自己拉出去枪毙一万次......

以上段子来源于真实事件,如有雷同,纯属巧合。哈哈哈哈。

言归正传,我们来看看死锁的几种形成原因。我认为起码有三种:

1.自己掉坑里了,这种我姑且简称自杀型。行动特征:

有人说,死锁不是两个人的事情吗?一个人也能自己把自己玩死?真的是可以的。最简单的自杀型就是在10号中断服务程序里面调用irq_disable(10),因为irq_disable()会执行一个同步,等正在执行的10号中断服务程序执行完,才继续disable 10号中断的动作。在10号中断服务程序里面调用irq_disable(10),等于在自己里面等自己结束,而自己结束又必须irq_disable(10)返回。

2.A等B做完某事才能继续,B也等A做完某事才能继续;这种我姑且称为互杀型。行动特征:

3.A等B做完某事才能继续,B等C做完某事才能继续,C等A做完某事才能继续;这种我姑且称为群殴型。行动特征:

互杀型应该是最简单也最容易理解的,我们先从互杀型开始。下面的代码演示中2个线程child1和child2,展示了最简单的互杀模型:

周末大家早点回家休息,读过一个愉快的周末!

周一见~~~,周一早8点准时推送全文

感谢您对Linux阅码场公众号的支持!

更多精彩,尽在"Linux阅码场",扫描下方二维码关注

你的随手转发或点个在看是对我们最大的支持!

宋宝华: Linux死锁的成因和常规调试方法(预告片)相关推荐

  1. 宋宝华Linux培训笔记-Linux多线程

    1.POSIX标准多线程 发送给进程下一组线程的信号将被共享,被其中任意一个线程处理.同一进程创建的线程同生死,如果收到一个kill信号,这一组task_struce都会退出. 2.NPTL模型 内核 ...

  2. 宋宝华: 僵尸进程的成因以及僵尸可以被“杀死”吗?

    僵尸不可能被杀死,因为它已经死了,不存在再死一次的问题.死的对立面是活,死者已死.只有活的进程才可能被杀死. 什么是僵尸 首先要明确一点,僵尸进程的含义是:子进程已经死了,但是父进程还没有wait它的 ...

  3. 宋宝华Linux培训笔记-Linux进程管理

    1.cpu进程状态 linux中进程状态如下图: 浅度睡眠为进程等待资源或中断响应,即使资源没有拿到也可以被唤醒:深度睡眠为进程等待资源,拿到资源后进入就绪状态. 僵死状态为进程死亡,但还没有被父进程 ...

  4. 宋宝华- Linux namespace - Docker 背后的故事

    名称空间是在OS之上实现容器与主机隔离,以及容器之间互相隔离的Linux内核核心技术.根据<Docker 最初的2小时(Docker从入门到入门)>一文,名称空间本质上就是在不同的工作组里 ...

  5. linux pdf 宋宝华,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    原创 宋宝华 Linux阅码场 2018-04-10 前言 网上关于BIO和块设备读写流程的文章何止千万,但是能够让你彻底读懂读明白的文章实在难找,可以说是越读越糊涂! 我曾经跨过山和大海 也穿过人山 ...

  6. 宋宝华: 关于DMA ZONE和dma alloc coherent若干误解的彻底澄清

    原创 宋宝华 Linux阅码场 2018-01-22 作者简介 宋宝华,他有10几年的Linux开发经验.他长期在大型企业担任一线工程师和系统架构师,编写大量的Linux代码,并负责在gerrit上r ...

  7. 宋宝华:评Linux 5.13内核

    目录 Misc cgroup Landlock安全模块 系统调用的堆栈随机化 printk无锁ringbuffer的进一步优化 BPF可调用内核函数 公共的IO PAGE Fault支持 Linux ...

  8. linux 没有windows.h头文件_宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)...

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前向声明 编程定律 先强调一点:在一切可 ...

  9. 宋宝华_2010年11-12月Linux驱动和内核讲座PPT下载

        12月29日,宋宝华老师在线讲座(按键和LCD驱动) cloudquan 2010-12-20 2/146 heyan0208 3 天前 00:37     宋宝华_2010年12月11日_& ...

  10. 宋宝华:LEP(Linux易用剖析器) 是什么,为什么以及怎么办(2)

    LEP(LINUX EASY PROFILING) 是Linuxer之LEP项目组(Barry Song,Mac Xu,陈松等以及陈莉君教授/西邮Linux 3+1实验室)正在致力于打造的一个开源项目 ...

最新文章

  1. 最长公共子序列的C++实现---附二维指针的使用方法
  2. easyui panel 默认折叠 右上角按钮
  3. Asp.net面试题之一
  4. java从静态代理到动态代理的理解
  5. 【UVA 437】The Tower of Babylon(记忆化搜索写法)
  6. Little Sub and Apples
  7. Unity的匹配系统
  8. JEECG ——11月份版本即将发布功能点
  9. java马克思手稿_java 循环嵌套解决一元,二元,三元方程(增长率,鸡兔同笼,马克思手稿)...
  10. python输出函数使用_python基本输入输出函数
  11. 《Unix网络编程(第3版)》代码编译的一些问题
  12. 编程实现 带符号减法溢出判断
  13. python 网易_python发送网易邮件
  14. 小菜找实习——阿里3月20日笔试第二题
  15. 微信服务号实现低配版Siri
  16. html如何保存离线使用,如何完整保存离线网页
  17. python实现 stft_Python中可转换的STFT和ISTFT
  18. 2018年访日外国游客消费创新高 中国大陆居首
  19. 怎样才算通用人工智能?
  20. 最美翻译官(适配器模式)

热门文章

  1. 安装fasttext的一系列问题(全)
  2. java基础系列(七) 同步和异步理解
  3. QueryDSL学习笔记
  4. QWidget菜单策略:Qt::ContextMenuPolicy
  5. DVWA靶场之SQL注入通关详解
  6. Android的Apk的加固(加壳)原理
  7. Android之传感器系统(Gsensor) .
  8. #137: expression must be a modifiable lvalue问题处理//字符串数组赋值问题
  9. error C2065: “xxxx”: 未声明的标识符
  10. Armitage之——使用Armitage进行后渗透攻击