linux中死锁的概念,【Linux】死锁概念总结

什么是死锁

如果一组进程(或者线程)中的所有进程(或者线程)都在等待该组中其他进程(或者线程)才能引发的事件,那么这组进程(或者线程)就是死锁的

死锁出现的情况举例

(1)线程自锁,自己将自己锁住

当进程(线程)第一次访问一个资源时,对该资源进行加锁;如果该进程(线程)又对该资源试图使用而进行加锁时,由于锁之前已被自己加上,便会等待锁的释放。这就永远处于挂起状态了,便产生了死锁。

(2)多个线程抢占资源

例如当线程A获得资源1时,线程B获得资源2时;然后此时,线程A又对2资源进行请求,线程B又对1进行请求,这样线程A,B都将等待另一个线程释放资源,于是线程A,B又永远处于挂起状态了,这又是死锁产生的一种情形。

0818b9ca8b590ca3270a3433284dd417.png

系统中资源的分类

<1>按照重用和消耗类型

(1)可重用资源

特点:

可以让用户多次使用的资源

性质:

1、每一个资源只可以让一个进程(或者线程)进行占用,不可以让多个进程(或者线程)共享

2、使用方法:请求资源---使用资源---释放资源

3、系统中每一个可重用资源中的数目是相对固定的,在进程(或者线程)运行期间不可以进行删除和创建

(2)可消耗资源

特点:

在运行期间创建和消耗

性质:

1、每一类可消耗的单元资源数目是变化的,可以为0

2、进程(或线程)在运行过程中可以不断的创建可消耗性资源的单元,将它们放入该资源类的缓冲区中,用来增加该资源类的单元数目。

3、进程(或线程)在运行过程中可请求若干个可消耗性资源,用于自身的消耗不再将它们返回给该资源类中。

4、可消耗性资源通常是由生产者进程(或线程)创建,由消费者进程(或线程)消耗。

<1>按照是否可以抢占类型

(1)不可抢占资源

当一个进程(或者线程)占用一个资源时,其他资源必须等到该资源进行释放才可以使用。

例如打印机和磁带

(2)可抢占资源

当一个进程(或者线程)占用一个资源时,其他进程(或者线程)、或系统可以对该资源进行抢占。

例如内存和CPU

死锁产生的必要条件

(1)互斥条件,资源在同一时刻只能由一个进程或者线程进行占用

(2)请求和保持,一个进程或者线程占用着一定数量的资源(至少一个),但又发出了新的资源请求,而新的资源此刻被其他进程或者线程占用着

(3)不可抢占资源,进程或线程在使用完占用的资源前,不可以被其他进程或者线程抢占

(4)循环等待,发生死锁时,必然存在死锁链

引起死锁的原因

(1)竞争不可抢占资源

假设系统中拥有两个进程p1和p2,它们都准备写两个文件F1和F2。

而这两者都属于可重用和不可抢占性资源。

这种情况下,如果进程p1在打开f1的同时,p2进程打开f2文件,当p1想打开f2时由于f2已结被占用而阻塞,当p2想打开f1时由于f1已结被占用而阻塞,此时就会无线等待下去,形成死锁。

(2)竞争可消耗资源

我们假设:系统中拥有三个进程p1、p2和p3以及三个可消耗资源m1、m2、m3。

进程p1一方面产生消息m1,将其发送给p2,另一方面要从p3接收消息m3。

而进程p2一方面产生消息m2,将其发送给p3,另一方面要从p1接收消息m1。

类似的,进程p3一方面产生消息m3,将其发送给p1,另一方面要从p2接收消息m2。

这种情况下,如果三个进程都先发送自己产生的消息后接收别人发来的消息,则可以顺利的运行下去不会产生死锁。

但要是三个进程都先接收别人的消息而不产生消息则会永远等待下去,便会产生死锁。

(3)进程推进顺序不当产生死锁

假设两个进程p1和p2,若p1保持了资源r1,p2保持了资源r2,则系统处于不安全状态,因为这两个进程再向前推进,便可能发生死锁。

例如,当P1运行到P1:Request(R2)时,将因R2已被P2占用而阻塞;

当P2运行到P2:Request(R1)时,也将因R1已被P1占用而阻塞,于是发生进程死锁。

处理死锁的办法

(1)预防死锁

具体方法:破坏死锁必要条件中的一个或者多个

注意:互斥是必要条件,不能破坏,否则将造成不可再现性

(2)避免死锁

具体方法:在资源分配过程中,防止系统进入不安全的区域

(3)检测死锁

具体方法:通过检测机制发现死锁,并可以采取适当措施解决死锁

(4)解除死锁

具体方法:当检测机制发现死锁后,采用相应的算法解决它

利用银行家算法解决死锁

1、在银行家算法中,主要的数据结构

(1)可利用资源向量Available[m]。m为系统中的资源种类数,如果向量Available[j] = K,则表示系统中Rj类资源由K个。

(2)最大需求矩阵Max[n][m]。m为系统中的资源种类数,n为系统中正在运行的进程(线程)数,如果Max[i][j] = K,则表示进程i需要Rj类资源的最大数目为K个。

(3)分配矩阵Allocation[n][m]。m为系统中的资源种类数,n为系统中正在运行的进程(线程)数,如果Allocation[i][j] = K,则表示进程i当前已分得Rj类资源的数目为K个。

(4)需求矩阵Need[n][m]。m为系统中的资源种类数,n为系统中正在运行的进程(线程)数,如果Need[i][j] = K,则表示进程i还需要Rj类资源K个。

以上三个矩阵间的关系:

Need[i][j] = Max[i][j] - Allocation[i][j]

2、银行家算法的具体步骤

设Request( i)是进程Pi的请求向量,如果Request(i) [j] = K,表示进程Pi需要K个Rj类型的资源。

(1)如果Request(i) [j] <= Need[i][j],转向步骤(2)。

(2)如果Request(i) [j] <= Available[j] ,转向步骤(3)。

(3)系统尝试着把资源分给进程Pi。

Available[j] = Available[j] - Request(i) [j];

Allocation[i][j] = Allocation[i][j] + Request(i) [j];

Need[i][j] = Need[i][j] - Request(i) [j];

(4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。

3、银行家算法中的安全性

(1)设置两个向量:

1、工作向量Work[m],它表示系统可提供给进程继续运行所需要的各类资源数目,初始值Work = Available。

2、Finish:它表示系统是否有足够的资源分配给进程,使其运行完成。开始时Finish[i] = false,当有足够的资源分配给进程时Finish[i] = true。

(2)从进程(线程)集合中找到一个能满足下述条件的进程(线程)。

1、Finish[i] = false

2、Need[i][j] <= Work[j],如果找到转到步骤3》,没找到转到步骤4》。

3、Work[j] = Work[j] + Allocation[i][j] ;

Finish[i] = true;

go to step 2;

4、如果所有进程(线程)的Finish[i] = true都满足,表示系统处于安全状态,反之系统处于不安全状态。

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

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

相关文章

revo uninstaller pro 序列号_iPhone12/pro已下架,在天猫

苹果10月份发布的首款5G版iPhone手机iPhone12系列手机一共有四款不同的型号分别为iPhone12 mini&#xff0c;iPhone12&#xff0c;iPhone12 Pro以及iPhone12 Promax。其中iPhone12以及iPhone12 Pro已经正式开始发售了&#xff0c;作为首款5G版iPhone手机&#xff0c;iPhone12系…

大话数据结构文摘

第1章 数据结构绪论 程序设计数据结构算法 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合 1.逻辑结构 &#xff1a;是指数据对象中数据元素之间的相互关系 a&#xff1a;集合结构 b&#xff1a;线性结构 c&#xff1a;树形结构 d&#xff1a;图形结构 2.物理结…

vue打包代码反编译_Android逆向反编译代码注入APK过程思路分析

一、名称解释逆向 - 是一种产品设计技术再现过程&#xff0c;从可运行的程序系统出发&#xff0c;运用解 密、反汇编、系统分析等多种计算机技术&#xff0c;对软件的结构、流程、算法、 代码等进行逆向拆解和分析&#xff0c;推导出软件产品的源代码、设计原理、结构、 算法、…

android 好玩的ui,让安卓更好玩 这些Launchers值得拥有

【手机中国新闻】如果你对Android的布局和界面越来越厌倦&#xff0c;那么是时候安装一个新的启动程序了。Launchers可以让你定制带有主题和图标包的智能手机&#xff0c;还可以在切换屏幕、启动应用程序等操作时&#xff0c;几乎完全控制手机的性能。以下是安卓智能手机或平板…

微星主板rgb_虽然这块主板价格有点小贵,但用过之后,感觉还是可以接受的

其实这块主板并不算贵&#xff0c;但它与其它型号&#xff0c;其它品牌的丐中丐主板相比&#xff0c;的确要贵好二、三百多元。对于有些用户而言&#xff0c;贵这几百元&#xff0c;完全就是一种赤裸裸的抢钱行为&#xff0c;所以早就在心里打上了“不值”的标签。能用丐中丐的…

三层架构学习的困难_“网工起航计划”3天集训营 带你了解大型企业网络架构设计!...

点击蓝字关注我们网工起航计划3天集训营 带你了解大型企业网络架构设计开营时间&#xff1a;8月26日晚8点DAY1&#xff1a;企业园区网二层架构冗余设计实战 时间:8月26日20:00-21:301、网络通信过程详细解析2、交换机工作原理详解3、企业园区网二层架构冗余设计涉及技术点&a…

mvn 汇编_2020年简单的早安共勉句子短信汇编58条

2020年简单的早安共勉句子短信汇编58条爱情&#xff0c;就像两个人在拉猴皮筋&#xff0c;疼的永远是后撒手的那个。早安&#xff01;以下是小编为大家推荐的早安共勉句子58条,欢迎大家借鉴与参考&#xff0c;希望对大家有所帮助。1、这地球少了谁都照样转&#xff0c;就是少了…

华为p50预装鸿蒙系统,华为P50系列将至,内部测试预装鸿蒙系统,还有4款重磅新品将发布...

2021年的上半年旗舰手机发布时间相较往年提前很多&#xff0c;小米11甚至赶在2020年12月份就带着骁龙888处理器强势登场&#xff0c;随后包括iQOO7、vivo X60 Pro系列、realme GT、Redmi K40系列以及众多国产新旗舰机型相继登场&#xff0c;如今包括OPPO、一加科技等厂商也已经…

ASP.NET中的Menu控件的应用

1、首先建立一个Default.aspx的主页面&#xff0c;再建立一个站点地图&#xff1a;Web.sitemap 2、Default.aspx的主页面的设计 <% Page Language"C#" AutoEventWireup"true" CodeBehind"Default.aspx.cs" Inherits"Menu控件1.Default&q…

synchronized原理_synchronized 关键字底层原理

synchronized 关键字底层原理属于 JVM 层面。① synchronized 修饰同步语句块public class SynchronizedDemo {public void method() {synchronized (this) {System.out.println("synchronized 代码块");}} }通过 JDK 自带的 javap 命令查看 SynchronizedDemo 类的相…

滑动窗口机制

(1).窗口机制 滑动窗口协议的基本原理就是在任意时刻&#xff0c;发送方都维持了一个连续的允许发送的帧的序号&#xff0c;称为发送窗口&#xff1b;同时&#xff0c;接收方也维持了一个连续的允许接收的帧的序号&#xff0c;称为接收窗口。发送窗口和接收窗口的序号的上下…

第一学期《计算机网络》作业一_新学期学习计划合集5篇-其他范文

[前言]新学期学习计划共含5篇&#xff0c;由好范文网的会员投稿推荐&#xff0c;小编希望以下多篇范文对你的学习工作能带来参考借鉴作用。第1篇&#xff1a;新学期学习计划这篇新学期学习计划范文是我们精心挑选的&#xff0c;但愿对你有参考作用。说来惭愧&#xff0c;上课好…

Java概览(java语言编程艺术笔记)

Java入门&#xff08;1&#xff09;——注释&#xff0c;面向对象&#xff0c;问题分解 注释 简单程序里广泛注释显然是愚蠢的&#xff0c;但是设计更大的&#xff0c;更复杂的程序是一种非常有用的记录。 面向对象 扩展类的实例同时也是现有类的实例。 这个怎么理解&#xff1…

鸿蒙os开源邀请全球开发者,全场景无缝连接 鸿蒙OS开源邀请全球开发者共助生态发展...

原标题&#xff1a;全场景无缝连接 鸿蒙OS开源邀请全球开发者共助生态发展万众瞩目之下&#xff0c;鸿蒙OS终究还是亮相了。在今日开始的华为开发者大会(HDC)上&#xff0c;我们熟悉的消费者业务CEO余承东首个登场&#xff0c;在回顾了华为消费者业务之后&#xff0c;余承东话题…

java 内嵌调用_Java高级开发必会的50个性能优化的细节(珍藏版)

在JAVA程序中&#xff0c;性能问题的大部分原因并不在于JAVA语言&#xff0c;而是程序本身。养成良好的编码习惯非常重要&#xff0c;能够显著地提升程序性能。● 1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担&#xff0c;缩短加载的时间&#xff0c;提高加载的效率…

SDL教程4——在VS2010中设置SDL扩展库

前几节我们了解到&#xff0c;SDL基本库只能加载普通的BMP图像&#xff0c;如果我们还想加载其它格式的图片&#xff0c;我们就需要用到SDL的扩展库&#xff0c;它可以帮助我们加载BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA and PNG等格式图片。要下载SDL扩展帮助文档&#xff…

html居右显示语言设置,iOS开发:纯代码设置UIButton文字居左或者居右显示

UIButton这个控件使用&#xff0c;作为资深的iOS开发人员来说是小儿科&#xff0c;但是有些时候还是需要记录一下UIButton的一些其他用法&#xff0c;这样方便快速解决实际问题。比如UIButton的纯代码编程的时候&#xff0c;设置文字居左显示&#xff0c;这个问题虽然简单的不能…

联想一体机电源键不亮_联想电脑一体机B505拆机经验

我修复联想电脑一体机的经验分享退休之后我较多的时间就是使用电脑&#xff0c;上上网&#xff0c;玩玩游戏&#xff0c;更多的是用电脑使用ps修图&#xff0c;修整照片。同时给自己的书法作品美化美化。很是方便。我这台b505的电脑&#xff0c;整体配置不错&#xff0c;就是一…

电脑入门完全自学手册_室内设计CAD施工图识读手册

室内设计全案行业班学习分为三个学习阶段第一阶段&#xff1a;软件技能学习&#xff0c;包括CAD、3DMAX、SU、PS、办公软件等第二阶段&#xff1a;设计理论学习&#xff0c;包括客户分析、方案设计、材料采买、工艺选用、预算造价等第三阶段&#xff1a;工程项目实战&#xff0…

[转]宝文!Apple Push Notification Service (APNS)原理与实现方案

原理 简单的说&#xff0c;app要单独实现消息动态更新&#xff0c;一种是轮询&#xff0c;这对用户来说会带来额外的流量。另一种方案是push&#xff0c;app client和server直接保持一个长连接&#xff0c;有新的消息时server push给app client。 这两种通过app自身实现的“pus…