用一个生动而形象的例子描述死锁的必要条件之不好意思, 我要扳手, 不要班花

news/2024/11/30 18:41:08/

不好意思, 我要扳手, 不要班花 🛩️

    • 死锁的必要条件
    • 生动而形象的例子
    • Java 中的死锁示例

死锁的必要条件

判断死锁的必要条件通常包括以下几点:

  1. 互斥条件:资源只能被一个进程(或线程)占有,无法被其他进程共享。
  2. 请求与保持条件:一个进程在请求新资源的同时,保持对已分配资源的占有。
  3. 不可剥夺条件:资源不能被强制从占有者手中回收,只能由占有者自愿释放。
  4. 循环等待条件:存在一个进程(或线程)等待序列,其中每个进程都在等待下一个进程释放资源。

生动而形象的例子

现在桌上摆着一把锤子, 一把扳手 // 互斥条件

我拿到了左手拿到一把锤子, 这时我准备去拿扳手 // 请求与保持条件

可这时我发现扳手被拿去开啤酒了, 而且他还想拿我的锤子开核桃

我不打算放弃, 你这拿去开啤酒开核桃明显不合理, // 不可剥夺条件,除非打架

我可是打算拿着锤子跟扳手去跟隔壁班花约会的

于是为了跟班花完美的约会, 于是我在这里等扳手

两个人一直耗到海枯石烂, 隔壁班花也有了自己的孩子 // 循环等待条件

于是你感慨死锁真是害人呀, 不说了, 继续等扳手了

Java 中的死锁示例

public class DeadlockExample {public static void main(String[] args) {final Object lock1 = new Object();final Object lock2 = new Object();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock1) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock2) {System.out.println("Thread 1 is holding lock 1 and lock 2.");}}}});Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock2) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock1) {System.out.println("Thread 2 is holding lock 1 and lock 2.");}}}});t1.start();t2.start();}
}

在上述代码中,有两个线程 t1 和 t2,它们同时试图获取 lock1 和 lock2 两个对象的锁,但获取锁的顺序不同。假设 t1 先获取了 lock1 的锁,然后在试图获取 lock2 的锁时被阻塞,而此时 t2 已经获取了 lock2 的锁,并试图获取 lock1 的锁,但 lock1 的锁已经被 t1 占用,因此 t2 也会被阻塞。这时候就产生了死锁,t1 和 t2 互相等待对方释放锁,导致程序无法继续执行。


http://www.ppmy.cn/news/39077.html

相关文章

非光滑优化systune、LMI、μ综合方法

鲁棒控制中的非光滑优化systune、LMI、μ综合方法都是常用的设计方法,它们各自具有优缺点,可以根据具体问题的需求进行选择。 非光滑优化systune方法:这种方法适用于一些非线性系统的控制设计,可以自动地搜索控制器的参数,以最小化所选性能指标,如控制系统的稳定裕度、鲁…

【动手学习深度学习-----自然语言处理:预训练】

词嵌入(Word2vec) word2vec工具包含两个模型,即跳元模型(skip-gram)和连续词袋(CBOW),对于在语义上有意义的表示,它们的训练依赖于条件概率,条件概率可以被看…

RabbitMQ入门

一、RabbitMQ介绍 1.1 引言 1.模块之间的耦合度太高, 导致一个模块宕机后,全部功能都不能用 2.同步通讯的成本问题 1.2RabbitMQ的介绍 市面上比较火爆的几款MQ: ActiveMQ, RocketMQ, Kafka,RabbinMQ …

ChatGPT惨遭围剿?多国封杀、近万人联名抵制……

最近,全世界燃起一股围剿ChatGPT的势头。由马斯克、图灵奖得主Bengio等千人联名的“暂停高级AI研发”的公开信,目前签名数量已上升至9000多人。除了业内大佬,欧盟各国和白宫也纷纷出手。 最早“动手”的是意大利,直接在全国上下封…

元宇宙与网络安全

元宇宙是一种虚拟现实空间,用户可以在计算机生成的环境中进行互动。元宇宙的应用范围很广,比如房地产,医疗,教育,军事,游戏等等。它提供了更具沉浸感的体验,更好地现实生活整合,以及…

OpenCV基础之模板匹配与直方图

文章目录OpenCV基础之模板匹配与直方图模板匹配直方图查看图像的三色mask掩模图像均衡直方图自适应直方图均衡化OpenCV基础之模板匹配与直方图 模板匹配 模板匹配即在一幅图像中寻找与模板图像最匹配(相似)部分的部分。简单的实例,匹配多个文件夹图案。 注意&…

算法竞赛进阶指南0x61 最短路

对于一张有向图,我们一般有邻接矩阵和邻接表两种存储方式。对于无向图,可以把无向边看作两条方向相反的有向边,从而采用与有向图一样的存储方式。 $$ 邻接矩阵的空间复杂度为 O(n^2),因此我们一般不采用这种方式 $$ 我们用数组模…

Node-CJS和ESM混合开发

Node — CJS和ESM混合开发 在JavaScript中,有两种主要的模块系统:CommonJS和ES Modules(ESM)。 CJS通过require引入,module.exports导出 ESM通过import引入,export导出 判断JS使用CJS还是ESM .cjs后缀的…