2.22.1、死锁的概念

news2024/11/16 4:38:06

1、死锁的概念

image-20230204233612922

1.1、什么是死锁

image-20230205190745487

我等待你,你等待他,他等待她,她等待我…这世界每个人都爱别人…

  • 我们从资源占有的角度来分析,这段关系为什么看起来那么纠结…

在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是 “死锁”。

  • 发生死锁后若无外力干涉,这些进程都将无法向前推进。

1.2、死锁、饥饿、死循环的区别

死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。

饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。

  • 比如:在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”。

死循环:某进程执行过程中一直跳不出某个循环的现象。有时是因为程序逻辑 bug 导致的,有时是程序员故意设计的。

相同点不同点
死锁都是进程无法顺利向前推进的现象
(故意设计的死循环除外)
死锁一定是 “循环等待对方手里的资源” 导致的,因此如果有死锁现象,那至少有两个或两个以上的进程同时发生死锁。另外,发生死锁的进程一定处于阻塞态。
饥饿可能只有一个进程发生饥饿。发生饥饿的进程既可能是阻塞态(如长期得不到需要的 I/O 设备),也可能是就绪态(长期得不到处理机)
死循环可能只有一个进程发生死循环。死循环的进程可以上处理机运行(可以是运行态),只不过无法像期待的那样顺利推进。死锁和饥饿问题是由于操作系统分配资源的策略不合理导致的,而死循环是由代码逻辑的错误导致的。死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题。

1.3、死锁产生的必要条件

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

互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设备)。

  • 像内存、扬声器这样可以同时让多个进程使用的资源是不会导致死锁的(因为进程不用阻塞等待这种资源)。

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

  • 例如:哲学家进程问题中,若每一个哲学家都持有一只筷子,则需要等待某一个哲学家释放该筷子,而不是强行夺走筷子

请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。

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


注意!发生死锁时一定有循环等待,但是发生循环等待时未必死锁(循环等待是死锁的必要不充分条件)

如果同类资源数大于 1 ,则即使有循环等待,也未必发生死锁。

  • 但如果系统中每类资源都只有一个,那循环等待就是死锁的充分必要条件了。

1.4、什么时候会发生死锁

对系统资源的竞争。各进程对不可剥夺的资源(如打印机)的竞争可能引起死锁,对可剥夺的资源(CPU)的竞争是不会引起死锁的。

进程推进顺序非法。请求和释放资源的顺序不当,也同样会导致死锁。

  • 例如,并发执行的进程 P1P2 分别申请并占有了资源 R1R2 ,之后进程 P1 又紧接着申请资源 R2,而进程 P2 又申请资源 R1,两者会因为申请的资源被对方占有而阻塞,从而发生死锁。

信号量的使用不当也会造成死锁。

  • 如生产者-消费者问题中,如果实现互斥的P操作在实现同步的 P 操作之前,就有可能导致死锁。(可以把互斥信号量、同步信号量也看做是一种抽象的系统资源)

总之,对不可剥夺资源的不合理分配,可能导致死锁。

1.5、死锁的处理策略

预防死锁

  • 破坏死锁产生的四个必要条件中的一个或几个。

避免死锁

  • 用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)

死锁的检测和解除

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

1.6、整体框架

image-20230205195304249

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

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

相关文章

ChatGPT入门案例|张量流商务智能客服

本篇介绍了序列-序列机制和张量流的基本概念,基于中文语料库说明基于循环神经网络的语言翻译的实战应用。 01、序列-序列机制 序列-序列机制概述 序列-序列(Sequence To Sequence,Seq2Seq)是一个编码器-解码器 (Encoder-Decoder Mechanism)结构的神经网络,输入是序列(…

【C#个人错题笔记】

观前提醒 记录一些我不会或者少见的内容,不一定适合所有人 字符串拼接 int a3,b8; Console.WriteLine(ab);//11 Console.WriteLine("ab");//ab Console.WriteLine(a""b);//38 Console.WriteLine("ab"ab);//ab38 Console.WriteLine…

17个优秀WordPress LMS在线教育平台主题

为您的WordPress在线教育平台主题网站选择在线课程主题是您在建立在线教育业务时做出的最重要的决定之一。正确的主题不仅决定了您网站的外观和感觉,还决定了用户体验。这在构建在线课程平台时变得更加重要,因为您的访问者将是您的学生,他们会…

nodejs基于vue疫情期间网课管理系统

随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于疫情网课管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了疫情网课管理系统,它彻底改变了过去传统…

内网渗透(四十四)之横向移动篇-DCOM远程执行命令横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

波次分拣系统

一、系统架构: v1.2基站软件管理系统仓库标签v1.4仓库标签二、系统简介: 标签系统主要由标签服务器,基站,电子标签前三部分组成,操作界面借助于京东仓库已有的作业电脑来实现,标签服务器与WMS进行数据对接。…

罗技LogitechFlow技术--惊艳的多电脑切换体验

作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。所以可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。…

mysql 索引原理和使用

一、索引是什么? 1.1. 索引是什么 当一张表有 500 万条数据,在没有索引的 name 字段上执行一个查询: select * from user_innodb where name ‘jim’; 如果 name 字段上面有索引呢? ALTER TABLE user_innodb DROP INDEX idx_n…

快学会这个技能-.NET API拦截技法

大家好,我是沙漠尽头的狼。 本文先抛出以下问题,请在文中寻找答案,可在评论区回答: 什么是API拦截?一个方法被很多地方调用,怎么在不修改这个方法源码情况下,记录这个方法调用的前后时间&…

Java零基础入门到精通(持续更新中)

打开CMD命令窗口 WINR输入cmd 常用cmd命令代码 切换磁盘 E: 回车即可切换到e盘查看当前路径下的所有内容 dir进入目录 cd test回退到上一级目录 cd..进入多级目录 cd test\index\aaa回退到磁盘目录 cd \清屏 cls关闭命令行窗口 exit小例子:使用命令行窗口…

细粒度视觉分析综述TPAMI2021

细粒度图像分析(FGIA,Fine-grained image analysis)是计算机视觉中一个长期存在的基本问题,并支撑着一系列不同的现实应用。FGIA的任务目标是分析从属类别(subordinate categories)的视觉对象,例…

【Azure 架构师学习笔记】-Azure Data Factory (1)-调度入门

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 前言 在开发好一个ADF pipeline(功能)之后,需要将其按需要运行起来,这个称之为调度。下图是一个简单的ADF 运作图, 按照需要的顺序&am…

uniapp 原生安卓开发插件(module),以及android环境本地调试(二)

uniapp 原生安卓开发插件(module),以及android环境本地调试(一) 1、前景 承接上一篇文章,由于uniapp每天只有限定的打包次数,所以每次插件调试都打包成为基座,这个不太方便&#x…

java 集合常见面试(一)

集合概述 java集合预览 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有…

预告|第四届OpenI/O启智开发者大会NLP大模型论坛强势来袭!

最近,ChatGPT刷爆了所有人的朋友圈。它不仅能够与人类进行日常自然的聊天,还能胜任如写论文、编代码等诸多较为复杂的语言工作。ChatGPT 爆火的背后,是NLP(自然语言处理)技术的飞速革新。在过去的十年里,人工神经网络计算的加入、…

#461 年轻人的世界没有容易二字,除了脱发

点击文末“阅读原文”即可收听本期节目剪辑、音频 / 卷圈 编辑 / SandLiu 卷圈 监制 / 姝琦 文案 / 粒粒 产品统筹 / bobo 录音间 / 声湃轩提起二月二,你一定会脱口而出“龙抬头”。龙抬头吃什么很重要,重要到可以吵一架,但比吃什么更重要…

echo和swagger的结合使用(oapi-codegen使用)

echo和swagger的结合使用(oapi-codegen使用) 相关官网: echo官网swagger 这里介绍的重点是swagger和echo的整合使用,具体的框架的使用方法请看官方文档。 1. 初衷 swagger官网提供了文档转代码的操作,但转出来的代…

Allegro如何通过报表的方式检查单板上是否有假器件操作指导

Allegro如何通过报表的方式检查单板上是否有假器件操作指导 在做PCB设计的时候,输出生产文件之前,必须保证PCB上不能存在假器件,如下图,是不被允许的 当PCB单板比较大,如何通过报表的方式检查是否存在假器件,具体操作如下 点击Tools点击Reports

你看,ChatGPT都知道优先使用BigDecimal

不是三婶儿偏执,非要吐槽。家人们,咱就是说,按照基操逻辑谁会把严格金额计算相关的数据使用double类型呢… “我以为吕布已经够勇猛了,这是谁的部下?” 前几天,一同事让帮忙写段代码。内容比较常规&#xf…

iTerm2 的配置与美化

前言 iTerm2是默认终端的替代品,也是目前Mac系统下最好用的终端工具,集颜值和效率于一身。 最近换了一台新的 MacBook Pro ,需要重装电脑上的常用软件。为了将 ITerm2 DIY为自己喜欢的样子,花了不少时间。为了方便下次再配置&…