什么是死锁?如何产生死锁?死锁的必要条件?怎么解决死锁?

news2024/11/20 1:27:05

🔒1、什么是死锁

死锁是一个非常让程序猿烦恼的问题,一旦所写的程序有了死锁,那么程序就无法执行下去,会出现严重的 bug,并且死锁非常隐蔽,我们不会轻易发现它,在开发阶段,不经意期间我们就会写出死锁,很难检测出来。

那么什么是死锁呢?竟然让我们如此烦恼。


“死锁”就是2个或2个以上的线程互相持有对方想要的资源,导致各自处于阻塞等待状态,致使程序无法执行下去,这就是“死锁”。

简单来说:一共有两个线程两把锁,T1线程拿到了A锁,T2拿到了B锁,但是T1还想要B锁,T2还像要A锁,谁也不释放锁,就会产生死锁

两个线程两把锁,t1 和 t2 各自对 锁A 和 锁B 加锁,再尝试获取对方的锁。线程在竞争资源,导致死锁。

以下两张图希望可以帮到你

🔒2、死锁的三个典型情况

🔒2.1情况一

一个线程一把锁,连续加两次。如果锁是不[可重入锁](https://so.csdn.net/so/search?q=可重入锁&spm=1001.2101.3001.7020),就会死锁。
Java 里的 synchronized 和 ReentrantLock 都是可重入锁

🔒2.2情况二

两个线程两把锁,t1 和 t2 各自对 锁A 和 锁B 加锁,再尝试获取对方的锁。线程在竞争资源,导致死锁。

下面图解展示以下这种情况:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1275756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言:写一个函数,输入一个十六进制数,输出相应的十进制数

分析: 当用户运行该程序时,程序会提示用户输入一个十六进制数。用户需要在命令行中输入一个有效的十六进制数,例如:"1A3F"。 接下来,程序调用了名为 xbed 的函数,并将用户输入的十六进制数作…

TCP_握手+挥手过程状态变化分析

TCP状态解读 握手挥手过程状态变化 同时握手 双发同时发起syn请求,状态变化过程如下: 图片来源:http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-4.htm 同时挥手 4次挥手,可以理解为2…

oops-framework框架 之 创建项目(二)

引擎: CocosCreator 3.8.0 环境: Mac Gitee: oops-game-kit 构建 本篇博客将使用oops-game-kit 构建一个新的开发项目, 关于 oops-framework 框架的了解,可参考上篇博客: oops-framework框架 之 初始了解(一) 大概…

WordPress:解决xmlrpc.php被扫描爆破的风险

使用WordPress的朋友都知道,一些【垃圾渣渣】会利用xmlrpc.php文件来进行攻击,绕过WP后台错误登录次数限制进行爆破。虽然密码复杂的极难爆破,但及其占用服务器资源。 方法一、利用宝塔防火墙(收费版) 一般可以直接使…

python中jupyter notebook安装教程

一、什么是Jupyter Notebook? Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。 ——Jupyter Notebook官方介绍 https://jupyter-notebook.readthedocs.io/en/stable/notebook.html二…

JMeter怎样测试WebSocket

一、安装WebSocket取样器 1、从JMeter插件管理器官网下载: https://jmeter-plugins.org/ 搜索websocket 1、jetty-http-9.1.2.v20140210.jar 2、jetty-io-9.1.2.v20140210.jar 3、jetty-util-9.1.2.v20140210.jar 4、websocket-api-9.1.1.v20140108.jar 5、w…

太阳能路灯系统在道路照明中的应用

太阳能路灯作为一种极为科学和环保的光源利用形式,一直以来备受关注,但是,目前虽然有很多技术可以证明太阳能路灯的可行性,不过,如何真正的将太阳能路灯应用到道路照明之中,还是需要进行深入分析和探讨的。…

安装两个WIN10/WIN11系统到两个盘中,第二个系统依赖原系统盘引导的问题

前段时间折腾装一个双系统,主要两个方面考虑: 1. 原来的系统又许多软件,想着先保留; 2. 系统想安装到一个固态硬盘中; 在安装的过程中遇到了一些问题,这里记录分享一下。 问题1,运行系统自动安装…

WebUI自动化学习(Selenium+Python+Pytest框架)005

基础知识学习完毕,接下来我们开始学习测试框架啦!!! 首先来回顾一下python自带的Unittest框架: Python基础学习016__UnitTest-CSDN博客文章浏览阅读97次。Testcase:测试用例:这个测试用例是UnitTest的组成部分,不是手…

2021年12月14日 Go生态洞察:Go 1.18 Beta 1 发布与泛型的引入

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

43.0BaseDao抽取dao公共父类

43.1. 回顾 1. 把数据库表中查询的结果封装到一个实体类中。 命名规则:类名和表名一致 类中属性和表的字段对应。 表中的一条记录对应实体的一个对象 多条记录→集合 43.2. 正文 目录 43.1. 回顾 43.2. 正文 43.3. 抽取dao公共父类。 43.4. 引入数据源 43.3. 抽取dao公共…

【算法】算法题-20231128

这里写目录标题 一、55. 跳跃游戏二、274. H 指数三、125. 验证回文串 一、55. 跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以&am…

力扣题:字符的统计-11.30

力扣题-11.30 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:49. 字母异位词分组 解题思想:将单词进行排序之后通过哈希表进行返回 class Solution(object):def groupAnagrams(self, strs):""":type strs: List[str]:…

【嵌入式Linux程序开发综合实验】-1(附流程图) | ARM开发板 | 测试“Hello World” | Makefile文件 | 实现加法相加

任务:编写在标准输出终端输出“Hello World!”的C语言代码以及输入指定数字相加结果、Makefile,并分别编译出在PC与ARM上运行的可执行程序文件。 设备以及工具 硬件:Linux开发板、PC机、串口连接线 图1 Linux开发板以及串口接线 …

计算机网络(超详解!) 第二节 物理层(下)

1.信道复用技术 复用 (multiplexing) 是通信技术中的基本概念。 它允许用户使用一个共享信道进行通信,降低成本,提高利用率。 1.频分复用 FDM(Frequency Division Multiplexing) 将整个带宽分为多份,用户在分配到一定的频带后,…

pytorch中Conv1d、Conv2d与Conv3d详解

1 卷积介绍 1.1 什么是卷积 卷积(convolution),是一种运算,你可以类比于加,减,乘,除,矩阵的点乘与叉乘等等,它有自己的运算规则,卷积的符号是星号*。表达式…

力扣每日一题(2023-11-30)

力扣每日一题 题目:1657. 确定两个字符串是否接近 日期:2023-11-30 用时:21 m 07 s 时间:11ms 内存:43.70MB 代码: class Solution {public boolean closeStrings(String word1, String word2) {if(word1.…

Kubernetes(K8s)Pod控制器详解-06

Pod控制器详解 Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建 控制器创建…

深搜回溯剪枝优化策略-全排列II

LCR 084. 全排列 II - 力扣(LeetCode) 这道题的主体思想和之前讲过的全排列是相似的,不同的是思考的角度要侧重于剪枝方向,所以可以通过这道题对剪枝思想的进一步扩展; 通过题意,可以知道,在上一…

智能电表红外线有什么用?

在如今的智能家居时代,智能电表作为电力行业的一项重要创新,正在逐渐取代传统电表,为用户提供更加便捷和智能的用电方式。而在智能电表的技术中,红外线的应用起到了重要的作用。那么,智能电表红外线有什么用呢&#xf…