【面试八股总结】死锁:产生条件、预防死锁、处理死锁、避免死锁

一、什么是死锁?

        死锁是指两个(或多个)线程互相等待对方数据的过程,死锁的产生导致程序卡死,不解锁程序将永远⽆法进⾏下 去

二、死锁产生条件

        死锁只有同时满足以下四个条件才会发生:互斥条件;持有并等待条件;不可剥夺条件;

环路等待条件。

1. 互斥条件

       进程对所需求的资源具有排他性,若有其他进程请求该资源,请求进程只能等待。

2. 持有并等待条件

        进程当前所拥有的资源在进程请求其他新资源时,由该进程继续占有。

3. 不可剥夺条件

        进程在所获得的资源未释放前,不能被其他进程强行夺走,只能自己释放。

  • 可抢占资源:可以从拥有它的进程中抢占而不会产⽣任何副作用,存储器就是⼀类可抢占资源。
  • 不可抢占资源:指在不引起相关计算失败的情况下,无法把它从占有它的进程处抢占过来。

4. 环路等待条件

        存在⼀种进程资源循环等待链,链中每个进程已获得的资源同时被链中下⼀个进程所请求。

三、如何预防死锁?

 1. 破坏互斥条件

        例如假脱机打印机技术允许若干个进程同时输出,唯⼀真正请求物理打印机的进程是打印机守护进程。

2. 破坏请求和保持条件

        ⼀种实现方式是规定所有进程在开始执行前请求所需要的全部资源。

3. 破坏不剥夺条件

        允许抢占资源

4. 破坏循环请求等待

        给资源统⼀编号,进程只能按编号顺序来请求资源。

四、发现死锁如何处理?

1. 鸵鸟策略

        把头埋在沙子里,假装根本没发生问题。 因为解决死锁问题的代价很高,因此鸵鸟算法这种不采取任务措施的方案会获得更高的性能。 当发生死锁时不会对用户造成很大影响,或发生死锁的概率很低,可以采用鸵鸟算法。大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法仅仅是忽略它。

2. 死锁检测与死锁恢复

        不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。

(1)每种类型⼀个资源的死锁检测

        通过检测有向图中是否存在环来实现,从⼀个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁发生。

(2)每种类型多个资源的死锁检测

        每个进程最开始时都不被标记,执行过程有可能被标记。当算法结束时,任何没有被标记的进程都是死锁进程。

  1.  寻找⼀个没有标记的进程Pi,它所请求的资源小于或等于 A ;
  2.  如果真找到这样⼀个进程,那么将C矩阵的第 i 行向量加到 A 中,标记该进程,并转回第1步;
  3.  如果没有这样的进程,那么算法终止。

  举个🌰:    

  上图中,有三个进程四个资源,每个数据代表的含义如下:

  • E 向量:资源总量
  • A 向量:资源剩余量
  • C矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量
  • R 矩阵:每个进程请求的资源数量

        进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执⾏,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。P2 可以执⾏,执⾏后释放 P2 拥有的资源,A = (4 2 2 1) 。P1 也可以执⾏。所有进程都可以顺利执⾏,没有死锁。

检测到死锁之后,可以采用以下方法进行恢复:

  • 利用抢占恢复 将进程挂起,强⾏取走资源给另⼀个进程使用,用完再放回
  • 利用回滚恢复 复位到更早的状态,那时它还没有取得所需的资源
  • 通过杀死进程恢复 杀掉环中的⼀个进程或多个,牺牲掉⼀个环外进程

五、程序运行中如何避免死锁?

        安全状态:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每⼀个进程运行完毕,则称该状态是安全的。  

Has 表示已拥有的资源数,Max 表示总共需要的资源数,Free 表示还有可以使⽤的资源数。

         从图 a 开始出发,先让 B 拥有所需的所有资源(图 b),运行结束后释放 B,此时 Free 变为 5(图 c);接着以同样的方式运行 C 和 A,使得所有进程都能成功运行,因此可以称图 a 所示的状态时安全的。

        安全状态的检测与死锁的检测类似,因为安全状态必须要求不能发生死锁。下面的银行家算法与死锁检测算法非常类似,可以结合着做参考对对比。

(1)单个资源的银行家算法

        一个小城镇的银行家,他向⼀群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。

(2)多个资源的银行家算法

  1. 查找是否存在所需资源矩阵(Max-Has)小于等于资源剩余量A的进程。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。
  2. 假若找到这样的进程,将该进程标记为终止,并将其已分配资源加到 A 中。
  3. 重复以上两步,直到所有进程都标记为终止,则状态时安全的。 如果一个状态不是安全的,需要拒绝进入这个状态。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

笔记-2024视频会议软件技术选型方案

一、背景 视频会议系统是一种现代化的办公系统,它可以使不同会场的实时现场场景和语音互连起来,同时向与会者提供分享听觉和视觉的空间,使各与会方有“面对面”交谈的感觉。随着社会的发展,视频会议的应用越来越广泛,…

【数据分析基础】实验四 matplotlib数据可视化处理

一.实验目的 掌握扩展库matplotlib及其依赖库的安装。了解matplotlib的绘图一般过程。熟练掌握折线图、散点图、柱状图、饼状图、雷达图的绘制与常用属性的设置。掌握绘图区域的切分、绘制不同子图的方法。熟悉坐标轴、图像标题、图例等对象的属性设置操作。 二、实…

新品!和芯星通全系统全频高精度板卡UB9A0首发

6月6日,和芯星通发布了UB9A0全系统全频高精度GNSS板卡,主要应用于CORS站、便携基站、GNSS全球监测跟踪站等。延续了上一代产品高质量原始观测量的特点,UB9A0在性能和稳定性方面均表现出众。 UB9A0基于射频基带及高精度算法一体化的GNSS SoC芯…

Django 开发也在用 React!

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。 如果我的分享对你有帮助,请关注我,一起向上进击。 在前天的推文里,我们分享了《Django 2024 年度报告》&am…

一起学大模型 - 一起动笔练习prompt的用法

文章目录 前言一、代码演示二、代码解析1. 导入所需的库和模块:2. 设置日志记录和初始化模型:3. 定义一个函数用于清理GPU内存:4. 定义一个继承自LLM基类的QianWenChatLLM类,并实现对话生成的逻辑:5. 示例代码的主体部…

柏曼护眼台灯值得入手吗?明基、书客实测对比

早期的台灯主要是以白炽灯为主,但随着LED技术的成熟,LED台灯逐渐成为主流。目前,台灯行业已经进入了一个高速发展的阶段,市场竞争也越来越激烈。如何选购护眼台灯也是大家最常问的问题,柏曼护眼台灯值得入手吗&#xf…

HTML静态网页成品作业(HTML+CSS)—— 电影泰坦尼克号介绍网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

2024年G3锅炉水处理证考试题库及G3锅炉水处理试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年G3锅炉水处理证考试题库及G3锅炉水处理试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机…

咖啡机器人如何精准控制液位流量

在如今快节奏的生活中,精确控制液位流量的需求愈发迫切,特别是在咖啡机器人等精密设备中。为了满足这一需求,工程师们不断研发出各种先进的技术,以确保液体流量的精准控制。其中,霍尔式流量计和光电式流量计就是两种常…

如何用Postman做接口自动化测试?5个步骤带你轻松实现!

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来本质是用代码去测试另一段代码,属于一种软件开发工作,已经开发完成的用例还…

基于函数计算部署GPT-Sovits语音生成模型实现AI克隆声音

GPT-Sovits是一个热门的文本生成语音的大模型,只需要少量样本的声音数据源,就可以实现高度相似的仿真效果。通过函数计算部署GPT-Sovits模型,您无需关心GPU服务器维护和环境配置,即可快速部署和体验模型,同时&#xff…

基于ensp的园区网络搭建综合实验

核心技术介绍 1、虚拟局域网(VLAN) 2、链路聚合(E-trunk) 3、多生成树协议(MSTP) 4、VLANIF三层逻辑接口 5、虚拟路由冗余协议(VRRP) 6、开放式最短路径优先(OSPF&…

【C++历练之路】C++11中的列表初始化声明新方法深入标准模板库的变革

W...Y的主页 😊 代码仓库分享💕 目录 1. C11简介 2. 统一的列表初始化 2.1 {}初始化 2.2 std::initializer_list 3. 声明 3.1 auto 3.2 decltype 4.STL中一些变化 1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误…

响应式流规范解析

在互联网应用构建过程中,我们知道可以采用异步非阻塞的编程模型来提高服务的响应能力。而为了实现异步非阻塞,我们可以引入数据流,并对数据的流量进行控制。我们来考虑一个场景,如果数据消费的速度跟不上数据发出的速度&#xff0…

腺苷调节合成高密度脂蛋白用于三阴性乳腺癌的化学免疫治疗

引用信息 文 章:Adenosine-modulating synthetic high-density lipoprotein for chemoimmunotherapy of triple-negative breast cancer 期 刊:Journal of Controlled Release(影响因子:10.8) 发表时间&am…

webgl_effects_stereo

ThreeJS 官方案例学习&#xff08;webgl_effects_stereo&#xff09; 1.效果图 2.源码 <template><div><div id"container"></div></div> </template> <script> import * as THREE from three; // 导入控制器 import { …

【乐吾乐2D可视化组态编辑器】实时数据,数据绑定

什么是绑定变量&#xff1f; 绑定变量是指把图元的一个属性与设备数据点关联的一个过程。【注意】只是建立一个数据模型的关联&#xff0c;数据源后面设置。 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.com/ 为什么不直接设置数据源&#xff1f; 方便批量…

AWS-生产级微服务部署架构分享

使用AWS搭建云上应用 名词解释 AWS ECR&#xff1a;AWS ECR 容器存储库&#xff0c;按项目名创建容器仓库&#xff0c;一个项目对应一个仓库&#xff0c;目前是由Jenkins构建镜像远程push到AWS ECR。 **AWS ECS&#xff1a;Amazon Elastic Container Service (ECS) &#xf…

物理安全防护如何创新强化信息安全体系?

物理安全防护是信息安全体系的重要组成部分&#xff0c;它通过保护实体设施、设备和介质等&#xff0c;防止未授权访问、破坏、盗窃等行为&#xff0c;从而为信息系统提供基础的安全保障。要创新强化信息安全体系中的物理安全防护&#xff0c;可以从以下几个方面着手&#xff1…

AI查重与降重:科研人员的新型助手

论文写作低效&#xff1f;试试这四款AI论文工具和降重技术&#xff01;-笔灵 副本 在科研领域&#xff0c;AI写作工具如同新一代的科研利器&#xff0c;它们能够极大提高文献查阅、思路整理和表达优化的效率&#xff0c;本质上促进了科研工作的进步。AI写作工具不仅快速获取并…