操作系统原理 —— 死锁的概念(十七)

news2025/2/22 14:34:30

什么是死锁

什么是死锁,如果你是个程序员,那么这概念肯定是不陌生的,死锁通常是指,在并发环境下,各个进程因竞争资源而造成一种相互等待的现象,导致的结果就是各个进程都处于阻塞状态,无法往下继续执行,这种情况就能称之为死锁

举个生活中的例子就是,张三和李四放学回家,走到家门口,张三却发现钥匙在李四那,同时李四也发现自己家的钥匙在张三那,就这样,两个人都不能进家门。

进程死锁、饥饿、死循环的区别

死锁:各个进程相互等待对方手里的资源,导致各个进程都阻塞,程序无法进行往下执行。

饥饿:由于长期得不到想要的资源,导致程序无法继续往下执行,比如说之前讲解进程调度算法中,短进程优先算法,由于一直不断的有短进程到来,导致长进程一直得不到 CUP 执行权,而从导致饥饿的现象。

死循环:某个进程在执行过程中,一直跳不出循环的现象,这个可能是因为程序 BUG导致。

这三个有一个共同现象就是:都是进程无法正常的往下执行,但是三者还是有区别的:

死锁一定是循环等待对方手里的资源,至少有两个或者两个以上的进程同时发生死锁,而且发生死锁的进程一定是处于阻塞状态。

饥饿可能只有一个进程也会发生,发生饥饿的昵称可能是阻塞状态,也有可能是就绪状态。

而死循环最大的区别是,它是运行态,死循环的进程是可以在 CUP 上执行的,只不过无法正常的往下执行程序,这个是由代码逻辑的错误导致的。

死锁产生的必要条件

产生死锁必须同时满足四个条件,只要有其中任何一条不成立,死锁就不会发生:

1、互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁。

2、不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走。

3、请求和保持条件:进程已经持有了至少一个资源,但是又同时请求新的资源,而该资源又被其他进程所占有,此时请求新资源的进程被阻塞,并且又没有释放自己手里的资源。

4、循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得资源啊的同时被下一个进程所请求。

注意:发生死锁时,一定有循环等待,但是发生循环等待不一定是死锁

什么时候会发生死锁

1、对系统资源的竞争:各个进程对不可剥夺的资源的竞争可能引起死锁,对可剥夺的资源竞争时不会引起死锁的。

2、进程推进顺序非法:请求和释放资源的顺序不当,同样也会发生死锁。例如:并发执行的进程 P1、P2 分别申请并且占有了资源 R1、R2,之后进程 P1 紧接着又申请资源 R2,而进程 P2 又申请资源 R1,两者会因为申请的资源被对方占用而阻塞,从而发生死锁。

3、信号量的使用不当也会导致死锁。

这三种情况,总而言之对不可剥夺的资源不合理的分配,可能会导致死锁。

死锁的处理策略

1、预防死锁:破坏死锁产生的四个必要条件中的一个或者几个。

2、避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁。

3、死锁的检测和解除:允许死锁的发生,不过操作系统会负责监测死锁的发生,然后采取某种措施解除死锁。

这几种后面会有章节详细来讲。

本章总结

在这里插入图片描述

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

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

相关文章

老司机解读香农定理、奈奎斯特定理、编码与调制

工程师都会考虑一个问题:信道上到底可以传输多大的数据,或者指定的信道上的极限传输率是多少。这就是信道容量的问题。例如,在xDSL系统中,我们使用的传输介质是仅有几兆带宽的电话线,而上面要传送几兆、十几兆甚至几十…

cuda编程学习——基础知识介绍!干货向(三)

本文主要内容为介绍CUDA编程前的一些基础知识 参考资料: 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 文章、讲解视频同步更新公众《AI知识物语》,B站:出门吃三碗饭 1:并行计算 并行程序可以分为 指令并行&#xff1…

还在使用System.out+System.currentTimeMillis打印耗时?Xrebel是你不可或缺的神器!

1、概述 在Java应用程序中,性能是至关重要的。由于Java应用程序通常在高并发环境中运行,并处理大量数据,因此需要确保其能够高效地运行。为了帮助开发人员更好地实现Java应用程序的性能调优,ZeroTurnaround推出了XRebel。 XRebe…

测试用例的设计方法(全)

等价类划分方法 一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类: 等价…

Stimulsoft 报表开发工具支持Laravel框架!一起来看~

Stimulsoft Reports 是一款报告编写器,主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署,如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等,在你的应用程序中嵌入报告设计器…

2023-05-24 LeetCode每日一题(T 秒后青蛙的位置)

2023-05-24每日一题 一、题目编号 1377. T 秒后青蛙的位置二、题目链接 点击跳转到题目位置 三、题目描述 给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下: 在一秒内,青蛙从它所在的当前顶点跳…

Jupyter Notebook 10个提升体验的高级技巧

Jupyter 笔记本是数据科学家和分析师用于交互式计算、数据可视化和协作的工具。Jupyter 笔记本的基本功能大家都已经很熟悉了,但还有一些鲜为人知的技巧可以大大提高生产力和效率。在这篇文章中,我将介绍10个可以提升体验的高级技巧。 改变注释的颜色 颜…

工程安全监测振弦采集仪在岩土工程中的应用

工程安全监测振弦采集仪在岩土工程中的应用 岩土工程中使用振弦采集仪在工程建设中起着至关重要的作用。振弦采集仪可以测量地面或者岩土中的振动参数,通过这些参数可以对地基、土壤和岩体的性质及其变化进行监测,帮助我们更好地了解工程地质条件和工程建…

Windows 11将加入Copilot的AI助手;约26%的中国用户已经部署了生成式AI技术

🚀 微软在Build开发者大会上宣布,将在Windows 11中加入一个名为Copilot的AI助手 微软在Build开发者大会上宣布,将在Windows 11中加入一个名为Copilot的AI助手,用户可以在任何应用程序中调用它,并根据用户的需求提供智…

【C++ 学习 ⑧】- STL 简介

目录 一、什么是 STL? 二、STL 的版本 三、STL 的 6 大组件和 13 个头文件 四、学习 STL 的 3 个境界 五、STL 的缺陷 参考资料: STL教程:C STL快速入门(非常详细) (biancheng.net)。 C STL是什么,有…

“五一”假期出行,伴随着哪些风险

2023年“五一”假期,文化和旅游行业复苏势头强劲,全国假日市场平稳有序。文化和旅游部数据中心测算,全国国内旅游出游合计2.74亿人次。 据交通部门数据显示,自4月27日铁路“五一”假期运输启动以来,截至5月4日&#x…

旧照片怎么修复成新照片?分享三种简单好用的修复方法

旧照片是我们珍贵的回忆,但是随着时间的推移,它们可能会因为自然衰老或者其他原因而变得模糊或者损坏。修复旧照片可以让我们重新体验美好的回忆,保留珍贵的记忆。随着技术的进步,现在可以通过数字化技术将旧照片修复成数字照片&a…

如何理解机器人学习和研究中的存量和增量

对于博客流量也类似如此,存量很重要,增量随着需求减弱,导致后发优秀的博主想要获得更高的关注和流量,需要花费比10年前博主更多的精力和时间。 自己工作地方现状就是存量薄弱,增量缓慢。 存量可以理解为基础增量可以理…

leecode77——组合(回溯算法)

leecode77 组合问题 🔎1.回溯算法是什么? 其实回溯算法和我们常说的 DFS 算法非常类似,本质上就是一种暴力穷举算法。回溯算法和 DFS 算法的细微差别是:回溯算法是在遍历「树枝」,DFS 算法是在遍历「节点」。 解决回…

第四十九天学习记录:C语言进阶:结构体

结构体 结构体的声明 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量 struct tag {member-list; }variable-list;问:C的new和C语言的结构体有什么异同? ChatAI答: C中的new是一个运算符&#xff…

Scrum的三个工件(产品Backlog、Sprint Backlog、产品增量 )

产品Backlog •产品backlog是一个按照价值排序的需求清单。 •为了达成产品目标,所有的需求都需要放到产品backlog中进行管理和规划。 •由产品负责人负责管理和维护。 产品Backlog当中的工作按照迭代的方式推进 •在Scrum中Sprint(冲刺&#xff09…

Spring Security 中的过滤器链是什么?它的作用是什么

Spring Security是一个安全框架,它提供了强大的安全保护功能,可以帮助开发者更加方便地实现应用程序的安全性。Spring Security中的过滤器链是其中一个非常重要的部分,它起到了非常重要的作用。本文将介绍什么是Spring Security中的过滤器链&…

经典JavaScript手写面试题和答案

文章目录 实现一个函数去重?实现一个函数,判断指定元素在数组中是否存在?实现一个函数,将给定字符串反转?实现一个函数,检测指定字符串是否为回文(即从前往后和从后往前的字符序列都相同&#x…

【30天熟悉Go语言】2 Go开发环境搭建、Hello World程序运行

文章目录 一、前言二、安装和配置SDK1、安装2、环境配置 三、开发工具1、GoLand2、VS Code 四、Hello World程序通过命令运行1)go build2)go run 1、Go 和 Java的文件结构对比2、Go和Java常用包对比 五、Go执行流程1、先编译再运行2、一次性编译运行区别…

一、尚医通登录需求

文章目录 一、登录需求1、登录效果2、登录需求 二、登录1,搭建service-user模块1.1 搭建service-user模块1.2 修改配置1.3 启动类1.4 配置网关 2、添加用户基础类2.1 添加model2.2 添加Mapper2.3 添加service接口及实现类2.4 添加controller 3、登录api接口3.1 添加…