当前位置: 首页 > news >正文

死锁的四个必要条件以及如何避免死锁

  • 死锁的四个必要条件以及如何避免死锁
    • 一.什么是死锁?
    • 二.死锁的四个必要条件
      • 1.互斥条件:
      • 2.请求与保持条件:
      • 3.不剥夺条件:
      • 4.循环等待条件:
    • 三.如何避免死锁
      • 1.破坏请求保持条件
      • 2.破坏不剥夺条件
      • 3.破坏循环等待条件

死锁的四个必要条件以及如何避免死锁

一.什么是死锁?

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

死锁需要必要的条件才能产生,下面为大家介绍死锁的四个必要条件。

二.死锁的四个必要条件

1.互斥条件:

一个资源每次只能被一个进程使用;

例如: 共享资源 a 和 b 只能被一个线程占用

2.请求与保持条件:

一个进程因请求资源而阻塞时,对已获得的资源保持不放;

例如: 线程 T1 已经获取共享资源 a,在等待共享资源 b 的时候,不释放共享资源 a

3.不剥夺条件:

进程已获得的资源,在末使用完之前,不能强行剥夺;

例如: 其他线程不能强行抢占线程 T1 占有的资源

4.循环等待条件:

若干进程之间形成一种头尾相接的循环等待资源关系;

例如: 线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,这形成了循环等待

三.如何避免死锁

线程产生死锁之后,只能通过外部干预来解决问题,比如重启程序,或者 Kill 线程。所以,我们只能在写代码时规避死锁的产生。那么如何避免死锁产生呢?根据产生死锁的四个必要条件,我们只需要破坏其中任何一个条件就可以解决。

第一个互斥条件是没有办法被破坏的,因为它是互斥锁的基本约束。其他三个条件都可以通过人工干预来破坏。

1.破坏请求保持条件

我们可以在首次执行一次性申请所有的资源,这样就不存在等待锁的问题了。

2.破坏不剥夺条件

占用部分资源的线程在进一步申请其他资源的时候如果申请不到,我们可以主动释放它占有的资源,这样不剥夺这个条件就被破坏了。

3.破坏循环等待条件

可以通过按序申请资源来预防死锁的产生。所谓按序申请,就是给资源编号,所有线程可以按照线性化的序号顺序去申请共享资源,先申请序号小的,再申请序号大的,这样循环等待自然就不存在了。

引用:

1.咕泡Java面试题

相关文章:

死锁的四个必要条件以及如何避免死锁

死锁的四个必要条件以及如何避免死锁 一.什么是死锁?二.死锁的四个必要条件 1.互斥条件:2.请求与保持条件:3.不剥夺条件:4.循环等待条件: 三.如何避免死锁 1.破坏请求保持条件2.破坏不剥夺条件3.破坏循环等待条件 死锁的四个必要条件以及如…...

浏览器多线程到事件循环机制

浏览器与js运行机制 进程与线程 进程 进程是CPU分配资源的最小单位,它是一个可以自己独立运行且拥有自己资源空间的任务程序;包括程序以及程序所使用的内存及系统资源 线程 线程是CPU调度的最小单位,它就是程序中的一个执行流&#xff1…...

Lambda表达式的本质

一直想写一篇文章,来总结lambda表达式,但是之前感觉总结的不是特别到位,现在看了几篇文章和视频后,感觉对lambda表达式有了比较深刻的认识,现在进行记录总结如下: lambda表达式又叫做匿名函数,…...

类的加载过程(生命周期)

类的加载过程(生命周期) 一、装载:通过一个类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象(将字节码加载到内存中),作为…...

2023最新谷粒商城笔记之MQ消息队列篇(全文总共13万字,超详细)

MQ消息队列 其实队列JDK中本身就有,不过这种队列也只能单体服务可能会使用,一旦项目使用的分布式架构,那么一定还是需要用到一个消息中间件的。我们引入消息队列的原因就是对我们的页面相应速度再优化,让用户的体验更好&#xff…...

多变量线性回归模型

多变量线性回归模型 模型参数为n1维向量,此时模型公式为 hθ(x)θ0x0θ1x1θ2x2...θnxnh_{\theta}(x)\theta_{0}x_{0}\theta_{1}x_{1}\theta_{2}x_{2}...\theta_{n}x_{n} hθ​(x)θ0​x0​θ1​x1​θ2​x2​...θn​xn​ 可以简化为 hθ(x)θTXh_{\theta}(x)\th…...

php 基于ICMP协议实现一个ping命令

php 基于ICMP协议实现一个ping命令 网络协议是什么ICMP 协议什么是ICMP?ICMP 的主要功能ICMP 在 IPv4 和 IPv6 的封装Wireshark抓包ICMP 请求包分析PHP构建 ICMP 数据包php中的 pack & unpack 函数字节和字符packunpackICMP计算校验和步骤总结网络协议是什么 网络协议&…...

Java基本数据类型

1.概述 佛说,大千世界,无奇不有。在这个世界里,物种的多样性,遍地开花,同样,在Java的世界里,也有着异曲同工之妙,Java秉承面向对象的特性,必然少不了区分对象的类型&…...

English Learning - L2 语音作业打卡 Day2 2023.2.22 周三

English Learning - L2 语音作业打卡 Day2 2023.2.22 周三💌 发音小贴士:💌 当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音[ ɑː ]&…...

45. 跳跃游戏 II

题目: 45. 跳跃游戏 II难度中等1974收藏分享切换为英文接收动态反馈给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 num…...

应届生Java面试50题线程篇(含解析)

什么是线程? 答:线程是操作系统能够进行运算调度的最小单位,是程序执行流的最小单元。在Java中,可以通过实现Runnable接口或继承Thread类来创建线程。 创建线程的方式有哪些?各自的优缺点是什么? 继承 Thread 类&…...

【数据库】第七章 数据库设计

第七章数据库设计 数据库设计概述 数据库设计的基本步骤 需求分析概念结构设计逻辑结构设计物理结构设计数据库实施数据库运行和维护 需求分析 收集需求,理解需求 收集各个角色的需求 概念数据库设计 建立概念模型 ,E-R图/IDEF1x图 消除冲突&…...

Burp Suite 常用模块简介

Burp Suite 常用模块分为 目标站点(target)模块 代理(proxy)模块 攻击(Intruder)模块 重放(Repeater) 模块 Target模块是对站点资源的收集,与站点各资源包发出和相应包的记录 Proxy模块是核心模块,可以拦截数据包发送往浏览器,进行修改后再…...

QML Item和Rectangle详解

1.Item和Rectangle Item类型是Qt Quick中所有可视项的基本类型。 Qt Quick中的所有可视项都继承Item。尽管Item对象没有视觉外观,但它定义了视觉项中常见的所有属性,例如x和y位置、宽度和高度、锚定和键处理支持。 Rectangle继承自Item,多…...

常见前端基础面试题(HTML,CSS,JS)(六)

GET 和 POST 的区别 从 http 协议的角度来说,GET 和 POST 它们都只是请求行中的第一个单词,除了语义不同,其实没有本质的区别。 之所以在实际开发中会产生各种区别,主要是因为浏览器的默认行为造成的。 受浏览器的影响&#xf…...

深度学习 李沐报错

3.6. softmax回归的从零开始实现 — 动手学深度学习 2.0.0 documentation softmax从0开始实现 函数执行需要加main指定 改成这样 if __name__"__main__":print(evaluate_accuracy(net, test_iter)) 不然会这样出错 RuntimeError: An attempt has been m…...

【JAVA程序设计】(C00104)基于Springboot的家庭理财管理系统——有文档

基于Springboot的家庭理财管理系统项目简介项目获取开发环境项目技术运行截图运行视频项目简介 基于Springboot开发的家庭理财管理系统设计与实现共分为三个角色:系统管理员、家庭管理员、家庭用户 管理员角色包含以下功能: 用户管理、修改密码、角色管…...

【第五章 AOP概述,底层原理,AOP术语,切入点表达式,AOP操作(基于注解方式,基于xml配置文件)】

第五章 AOP概述,底层原理,AOP术语,切入点表达式,AOP操作(基于注解方式,基于xml配置文件) 1.AOP概述: (1)什么是AOP: ①面向切面编程(…...

面试官: 你知道 JWT、JWE、JWS 、JWK嘛?

想起了 之前做过的 很多 登录授权 的项目 它相比原先的session、cookie来说,更快更安全,跨域也不再是问题,更关键的是更加优雅 ,所以今天总结了一篇文章来介绍他 JWT 指JSON Web Token,如果在项目中通过 jjwt 来支持 J…...

基于企业微信应用消息的每日早安推送

基于企业微信应用消息的每日早安推送 第一步:注册企业微信 企业微信注册地址:https://work.weixin.qq.com/wework_admin/register_wx 按照正常流程填写信息即可,个人也可以注册企业微信,不需要公司 注册完成后,登录…...

MediaCreationTool.bat:5大实用功能带你告别Windows安装烦恼

MediaCreationTool.bat:5大实用功能带你告别Windows安装烦恼 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

漏洞审计实战:从思维模式到工具协同的代码安全深度剖析

1. 项目概述:从“bug-audit-skill”看漏洞审计的实战化沉淀最近在GitHub上看到一个名为“bug-audit-skill”的项目,作者是abczsl520。这个项目名直译过来就是“漏洞审计技能”,它不像一个具体的工具,更像是一个知识库或经验集。在…...

教育科技产品集成AI答疑功能的技术方案与接入实践

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 教育科技产品集成AI答疑功能的技术方案与接入实践 在在线教育领域,为学生提供即时、准确的答疑服务是提升学习体验和效…...

3分钟让你的Windows桌面焕然一新:NoFences开源分区神器

3分钟让你的Windows桌面焕然一新:NoFences开源分区神器 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要在杂乱无章的桌面图标中寻找需要的文件&…...

树莓派+Ollama分离部署OpenClaw:打造家庭局域网AI助手

1. 项目概述:在树莓派上部署OpenClaw,实现本地网络AI助手最近在折腾我的家庭实验室,想把AI助手的能力从主力电脑上解放出来,让它变成一个常驻在角落里的独立服务。我的主力机性能不错,跑大语言模型没问题,但…...

智能家居设备链故障诊断:从HDCP黑屏到系统化排查指南

1. 从一次“黑屏”故障说开去:智能家居时代的设备链诊断困境上周的一个晚上,我出门取外卖,为了让新来的小猫Mulligan自娱自乐,我特意把电视开着,让它继续玩Roku屏保里的虚拟水族箱。这算是它最喜欢的“游戏”之一。等我…...

在ubuntu上为nodejs后端服务接入taotoken多模型api的步骤

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在 Ubuntu 上为 Node.js 后端服务接入 Taotoken 多模型 API 的步骤 为后端服务集成大模型能力是现代应用开发的常见需求。如果你在…...

多目标跟踪(Multi-Object Tracking, MOT)中的核心算法介绍:卡尔曼滤波算法和匈牙利算法

卡尔曼滤波算法和匈牙利算法两者都是多目标跟踪(Multi-Object Tracking, MOT)中的核心算法,但解决的是完全不同的问题。简单来说: 卡尔曼滤波:负责“预测未来”和“修正当前”。它帮你推测目标下一刻会出现在哪里。匈…...

原来Ilya还有70亿美元OpenAI股权

鹭羽 发自 凹非寺量子位 | 公众号 QbitAI马斯克 VS 奥特曼的世纪庭审,也太劲爆了——感觉自己像是瓜田里的猹,一瓜未平一瓜又起。吃不过来,根本吃不过来……这不,就在刚刚,OpenAI的造富神话被「一不小心」炸了出来。Op…...

青龙脚本自动化:五款实用脚本助你轻松管理日常任务

青龙脚本自动化:五款实用脚本助你轻松管理日常任务 【免费下载链接】huajiScript 滑稽の青龙脚本库 项目地址: https://gitcode.com/gh_mirrors/hu/huajiScript 在当今快节奏的数字时代,自动化工具已成为提升效率的必备利器。如果你正在寻找一款能…...