什么条件下会出现死锁,如何避免?

news2024/9/25 19:23:13

文章目录

  • 一、什么是死锁
  • 二、产生死锁的原因:
  • 三、如何避免死锁:


一、什么是死锁


死锁,简单来说就是两个或者两个以上的线程在执行过程中,去争夺同一个共享资源导致相互等待的现象。如果没有外部干预,线程会一直处于阻塞状态,无法往下执行。这样一直等待处于阻塞状态的线程,被称为死锁线程。

二、产生死锁的原因:

产生死锁需要同时满足以下四个条件:
在这里插入图片描述
第一个: 互斥条件,共享资源 a 和 b 只能被一个线程占用;
第二个: 请求和保持条件,线程 T1 已经获取共享资源 a,在等待共享资源 b 的时候,不释放共享资源 a;
第三个: 不可抢占条件,其他线程不能强行抢占线程 T1占有的资源;
第四个: 循环等待条件,线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,这形成了循环等待。

三、如何避免死锁:

线程产生死锁之后,只能通过外部干预来解决问题,比如重启程序,或者 Kill线程。所以,我们只能在写代码时规避死锁的产生。那么如何避免死锁产生呢? 根据产生死锁的四个必要条件,我们只需要破坏其中任何一 个条件就可以解决。
在这里插入图片描述第一个互斥条件是没有办法被破坏的,因为它是互斥锁的基本约束。其他三个条件都可以通过人工干预来破坏。比如请求保持条件,我们可以在首次执行一次性申请所有的资源,这样就不存在等待锁的问题了。
第二个,对于不可抢占条件来说, 占用部分资源的线程在进一步申请其他资源的时候如果申请不到,我们可以主动释放它占有的资源。这样不可抢占这个条件就被破坏了。
第三个,对于循环等待条件来说,可以通过按序申请资源来预防死锁的产生。所谓按序申请,就是给资源编号,所有线程可以按照线性化的序号顺序去申请共享资源,先申请需要序号小的,再申请序号大的,这样循环等待自然就不存在了。

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

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

相关文章

图像的算术操作

1.图像的加法 用途:图像的合成 Rain图片View图片 合成代码: import numpy as np import cv2 as cv import matplotlib.pyplot as pltrain cv.imread(rain.png) plt.imshow(rain[:, :, ::-1]) plt.show()view cv.imread(view.png) plt.imshow(view…

773. 滑动谜题

链接&#xff1a;773. 滑动谜题 题解&#xff1a;https://blog.csdn.net/INGNIGHT/article/details/131350054 滑动拼图 II class Solution { public:int slidingPuzzle(vector<vector<int>>& board) {// 异常判断if (board.size() < 0 || board[0].size…

怎么管理好一个团队?

一个成功的企业需要一个高效、有能力、积极的团队来支持其业务运营。管理一个团队需要领导者具备一定的技能和知识&#xff0c;怎么管理好一个团队对于许多企业领导者而言也是一项不小的挑战。对此&#xff0c;我想首先推荐一本非常优秀的团队书籍——《经理人参阅&#xff1a;…

js vuejs dagre-d3绘制流程图实用指南 有向图可视化

写在前面 之前有小伙伴问我如何使用 D3 在前端绘制流程图,今天在这里给安排上,与大家分享。 明确一点,只要你的数据计算能力足够强,使用原生D3绘制流程图绝对可以的,但是,为了让大家更容易上手,避免重复造轮子,给大家推荐一个专门绘制流程图的 D3 插件 dagre-d3。 首…

idea tomcat js 汉字乱码

Run/Debug Configuiations->VM options:-Dfile.encodingUTF-8

服务 第七章

目录 1.tomcat 核心组件 2.处理请求&#xff0c;内部数据流向 3.请求处理过程 4.主要目录说明 5.tomcat 优化 6.总结 1.tomcat 核心组件 2.处理请求&#xff0c;内部数据流向 3.请求处理过程 4.主要目录说明 5.tomcat 优化 6.总结 tomcat 属于轻量级应用服务器&#xf…

基于Tars高并发IM系统的设计与实现-基础篇1

基于Tars高并发IM系统的设计与实现–基础篇1 作者简介 兰怀玉 毕业于中央民族大学计算机专业 先后供职国内外多家公司软件研发设计岗位&#xff0c;有丰富的软件研发经验。 从事IM领域设计研发十余年&#xff0c;先后领衔多个IM通讯系统设计与研发发&#xff0c;拥有丰富的IM…

裂墙推荐!阿里大牛新产Java面试速成指南,主打就是躺着拿Ofeer

很多粉丝后台留言&#xff0c;Java程序员面临的竞争太激烈了…… 我自己也有实感&#xff0c;多年身处一线互联网公司&#xff0c;虽没有直面过求职跳槽的残酷&#xff0c;但经常担任技术面试考官&#xff0c;对程序员招聘市场的现状很清楚。导致现在激烈竞争的原因不外乎三方面…

移动端数据可视化设计

在做APP设计的时候&#xff0c;难免会遇到一些需要展示数据的场景。使用传统的表格和文档展示数据不仅难看&#xff0c;也影响用户理解数据的含义。而数据可视化设计能将数据以更加直观的方式展现出来&#xff0c;使数据更加客观、更有说服力。 在移动应用中&#xff0c;数据可…

uview-plus上传图片,upload组件带参数上传

一、引入uview-plus 请自行在项目中引入uview-plus组件库&#xff0c;此处不多赘述 二、使用 html 部分&#xff0c;上传组件的样式自己去定义&#xff0c;不多赘述 <u-upload:fileList"fileList" // 文列列表afterRead"afterRead" // 读取后的…

03双向链表

双向链表 单向链表的缺点 单向链表&#xff0c;只能是一个方向来查找&#xff0c;而双向链表可以向前或者向后查找。单向链表不能自我删除&#xff0c;需要靠辅助结点。而双向链表可以自我删除。所以我们单链表删除结点的时候&#xff0c;总要找到temp&#xff08;待删除结点…

python+requests库使用时报错:ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131)

本人测试小白~第一次用pythonunittestrequest做接口测试的学习时&#xff0c;一直报这个ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131) 反复检查代码也没有发现什么问题&#xff0c;然后在网上找了很多方法&#xff0c;最终解决这个问题的方法…

BUUCTF 世上无难事 1

题目描述&#xff1a; 以下是某国现任总统外发的一段指令&#xff0c;经过一种奇异的加密方式&#xff0c;毫无规律&#xff0c;看来只能分析了。请将这段语句还原成通顺语句&#xff0c;并从中找到key作为答案提交&#xff0c;答案是32位&#xff0c;包含小写字母。 注意&…

三层交换机实现不同VLAN的数据转发

实验环境&#xff1a; 思科模拟器&#xff0c;Cisco Packet Tracer 实验拓扑&#xff1a; 实验配置&#xff1a; &#xff08;1&#xff09;PC配置 IP子网掩码网关PC1192.168.10.1255.255.255.0192.168.10.254PC2192.168.10.2255.255.255.0192.168.10.254PC3192.168.20.325…

Mybatis - 统计SQL执行时间

由于系统数据量较大&#xff0c;SQL执行十分低效&#xff0c;我们在做数据库优化时&#xff0c;想在日志中看到每个SQL执行的时间&#xff0c;以方便针对性的优化 一、切面编程Aspect 此方案主要是通过环绕切面的方式将mapper包下的接口方法&#xff0c;然后前后计算时间差即…

C语言初阶之结构体

结构体 1. 结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化 2. 结构体成员的访问3. 结构体传参 1. 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。…

小波变换笔记

突然变化的图像或信号 小波变换 高带宽&#xff1f; 放缩和时延 放缩因子和频率成正比 小波在频域中具有带通特性 Cf 中心频率 s 小波刻度 \delta t 采样间隔 时延 我们需要移动小波&#xff0c;以便使其和信号中寻找的特征对齐 时频分析时域频率成分滤波 连续小波变换 C…

【手撕算法|动态规划系列No.3】leetcode746. 使用最小花费爬楼梯

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

三相电机线电流上的锯齿状高频波形的来源

三相电机的线电流上会叠加有一组锯齿状波形&#xff0c;这里&#xff0c;光标可以看到它的频率&#xff1a;这是40KHz。当前线电流基频大约35 Hz。我们把变频器载波频率切至6.0&#xff0c;小的杂波频率变至60KHz&#xff1a; 所以&#xff0c;这类波形上的一级肉眼可见的杂波是…

时间序列分解 | Matlab经验模态分解(EMD)的信号分解

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab经验模态分解(EMD)的信号分解 部分源码 %----------------------