当线程A持有独占锁a,并尝试去获取独占锁b的同时,线程B持有独占锁b,并尝试获取独占锁a的情况下,就会发生AB两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。
造成死锁必须达成的4个条件(原因):
例子:
防止死锁就是破坏造成死锁的,若干条件中的任意一个。
在并发程序中,避免了逻辑中出现复数个线程互相持有对方线程所需要的独占锁的的情况,就可以防止死锁。
在程序运行时避免发生死锁。
不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。
资源剥夺法
剥夺陷于死锁的进程所占用的资源,但并不撤销此进程,直至死锁解除。
进程回退法
根据系统保存的检查点让所有的进程回退,直到足以解除死锁,这种措施要求系统建立保存检查点、回退及重启机制。
进程撤销法
撤销陷入死锁的所有进程,解除死锁,继续运行。
逐个撤销陷入死锁的进程,回收其资源并重新分配,直至死锁解除。
可选择符合下面条件之一的先撤销: 1.CPU消耗时间最少者 2.产生的输出量最小者
3.预计剩余执行时间最长者 4.分得的资源数量最少者后优先级最低者
系统重启法
结束所有进程的执行并重新启动操作系统。这种方法很简单,但先前的工作全部作废,损失很大。
更多方案参考https://zhuanlan.zhihu.com/p/61221667
参考
https://www.jianshu.com/p/44125bb12ebf
https://zhuanlan.zhihu.com/p/61221667
本文链接https://blog.csdn.net/qq_39903567/article/details/115531838
嵌入式入门学习笔记遇到的问题以及心得体会 DAY28 概述 一、线程 二、同步和互斥...
字符缓冲流 缓冲流BufferedReader/BufferedWriter 高效读写 支持输入换行符 可一...
用JavaScript操作表单和操作DOM是类似的,因为表单本身也是DOM树。 不过表单的输...
有时候突然会把几件不搭边的事情联系起来,竟然能够找到一些共通的地方。我在琢...
在Linux中我们使用lsusb命令列出USB设备及其属性,lsusb用于显示系统中的USB总线...
在数据中心的运营技术(OT)方面,传统的基础设施(如电源、制冷和通风设施)的...
1. 异常现象 从 Intellij IDEA 2017.1 版本升级到当前最新版本?Intellij IDEA 20...
说来和MySQL倒是有缘,毕业的第一份工作就被分配到了RDS团队,主要负责把MySQL弄...
介绍# 响应压缩技术是目前Web开发领域中比较常用的技术,在带宽资源受限的情况下...
功能函数: 复制代码 代码如下: functionmp3(s,a){ document.write("divclass=\"p...