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

死锁的总结

哲学家死锁造成的原因:我有你需要的,但你已经有了

饥饿与死锁的区别

死锁一旦发生一定又饥饿现象,但是饥饿现象产生不一定是死锁

历史上对于死锁的声音

死锁的方案

前面两个都是不允许死锁出现

前面都是概念性的东西

后面我们研究如何破坏死锁

保守派思想:

保守派是如何解决死锁的,根据前面,我们知道他们的思想是从源头切断死锁的出现

我们根据锁的特性进行判断

第一个互斥使用,如果我们让进程之间不互斥使用,那么如果有相同堆的资源,我们可以共享的,那么可能会出现数据冲突。

第二个不可剥夺,如果进程内的资源可以被任意抢夺,那么如果一个进程在运行,那么资源被随意抢占了,如何确保资源不会出错,就算保存资源,那么大量的进程切换一样会浪费大量资源。

第三个占有和等待,如果p1进程一直占用p2进程想要的资源,那么我将p1进程中p2需要的资源释放出来,让给p2,这样就可以解决p1占用资源和p2一直等待资源的问题,这个模型貌似是可行的。

第四个循环等待,和上面那个差不多,其他资源被占用,导致有进程一直循环等待资源释放,但这里的循环等待是一直循环等待,根本拿不到资源,解决掉他也能解决死锁。

上面这些特性有两个貌似是可以从根源上解决死锁的,但我们发现如果根据这些特性去编写程序,那么自由度,以及开发成本会直线上升,这不符合商业逻辑。

进步派思想:

死锁的避免

安全算法

我们先学一个银行杠杆模型

银行给借款人一个credits,达到credits立刻还款。

下图推演过程

假设一开始我们借给tom3万,bob4万,银行还剩三万。

我们需要推演,ben现在是否能向银行申请一万的借款

ben现在向银行申请一万的借款,那么银行批准之后,再向tom借款两万,立刻回笼五万。

回笼五万又向bob借款四万,立刻回笼八万。

然后银行借给ben6万,回笼7万。

最后得到ben可以得到这一万的借款。

注:给ben申请之后,需要严格按照推演流程进行贷款(这里不考虑借贷人是否有还款能力)。

假设ben要申请两万,那么银行会否让ben申请呢?

这个情况下银行应该是不会借给ben钱,而且会要求ben降额。

我们可以根据前面的模型将银行抽象成系统,将钱抽象成资源。

演算过程就是算法。

 

 

安全状态

我们需要给进步派思想的安全状态做个定义

我这里翻译一下第一句,可能不太准确。

在某一个特定的顺序,每个进程都能拿到它所需要的最大资源量,且避免出现死锁的情况,那么这个系统的状态就是安全的。正式一点来说,当且仅当存在一个安全的进程序列。

总之安全状态就是在一个状态下,有一串进程序列运行,这些进程不会产生死锁

不安全状态就是这个进程序列运行时会产生死锁。

我们需要根据银行算法来寻找这个系统存在的安全序列,去运行特定的程序。

 

银行家算法数据结构

 

 

我们根据max(需要的)的矩阵减去allocation(已有的)得到need矩阵,得到进程执行需要的资源矩阵。

算法如下

第一步:我们可以找到332资源可以先分配给p1和p3,我们先选择从p1开始

第二步:我们为将资源分配给p1,然后返回332+200等到可用资源532

第三步:532可以分配给p3和p4,我们选择p3

第四步:532分配给p3,我们得到532+211=743,现在我们需要的所有资源都可以被分配了,也就不需要继续向下分析了,大家可以自己分析一下。

我们可以根据上面的分析证明这个系统不止一个安全序列

这里我们要注意如果系统进程算法是可抢夺的,如果执行这条进程序列时有外部进程进来,系统会从插入的地方开始继续计算是否让这个进程插入序列。

此算法的优缺点

 

 

缺点最明显的就是顺序是固定的,我们前面研究了司机和售票员进程,售票员的进程是不可以在司机前的,所以如果是这个算法就有问题,其次就是运行前要用大量资源,以及进入系统的进程个数资源(进程序列)是规定好的,如果有新的进程进来,重新算又要耗费资源。

上面的算法模型是理论模型

佛系派

允许死锁发生,发生系统去解锁(系统去检测)。

 

死锁发生检测并解锁

用图例分析锁

第一个图p3执行完将资源归还给R4和R2,p2拿到p3归还的R2,p2执行完将资源归还给R1和R3,p1拿到p2归还给R1的资源,p1执行完归还R1和R3的资源,无环无锁。

第二个图p3得不到R3的资源无法归还R2,p2拿不到R2的资源无法归还R3,p1拿不到R1的资源无法归还R3,反之亦然,这里可以看出有环且有死锁。

第三个图大家自己分析一下

 

图例申请和分配简化

 

 

初步分析

p1无法消去,因为有一个申请边资源被占用

p2可以消去

p3和p1一样

p4可以消去

 

消去p4和p2的边可以得到,p1和p3也可以消去。

 

上面的各节点可以叫做孤立节点

 

死锁定理

学习完上面的这些理论,我们再对死锁的解决办法进行总结

讲了这么多我们如何解除死锁

如果我们不检测、解开死锁,会产生更多死锁,然后系统崩溃,需要重启

最后一句虽然这个方法并非可行方案,但是这个方法被广泛应用

死锁发生的概率是很少的

 

相关文章:

死锁的总结

哲学家死锁造成的原因:我有你需要的,但你已经有了 饥饿与死锁的区别 死锁一旦发生一定又饥饿现象,但是饥饿现象产生不一定是死锁 历史上对于死锁的声音 死锁的方案 前面两个都是不允许死锁出现 前面都是概念性的东西 后面我们研究如何破坏…...

强化学习RL 01~ 数学基础

目录 RL理解要点 1. RL数学基础 1.1 Random Variable 随机变量 1.2 概率密度函数 Probability Density Function(PDF) 1.3 期望 Expectation 1.4 随机抽样 Random Sampling 2. RL术语 Terminologies 2.1 agent、state 和 action 2.2 策略 policy π 2.3 奖励 reward …...

Java的运算符

目录 一、什么是运算符 二、算术运算符 1. 基本四则运算符:加减乘除模( - * / %) 2、增量运算符 - * % 3. 自增/自减运算符 -- 三、关系运算符 四、 逻辑运算符(重点) 1. 逻辑与 && 2. 逻辑或 || 3. 逻辑非 ! 4. 短路求值…...

扫地机器人(蓝桥杯C/C++)

题目描述 小明公司的办公区有一条长长的走廊,由 NN 个方格区域组成,如下图所示。 走廊内部署了 KK 台扫地机器人,其中第 ii 台在第 A_iAi​ 个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干净。…...

如何理解API?API 是如何工作的?(5分钟诠释)

大家可能最近经常听到 API 这个概念,那什么是API,它又有什么特点和好处呢? wiki 百科镇楼 …[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of cle…...

PAT--1111 对称日

央视新闻发了一条微博,指出 2020 年有个罕见的“对称日”,即 2020 年 2 月 2 日,按照 年年年年月月日日 格式组成的字符串 20200202 是完全对称的。 给定任意一个日期,本题就请你写程序判断一下,这是不是一个对称日&a…...

前端纯函数和副作用概念,且在react上的体现详解

什么是纯函数 纯函数是这样一种函数,即相同的输入,永远会得到相同的输出的函数,而且没有任何可观察的副作用。 什么是副作用 副作用是在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互。 个…...

转行软件测试3年了,听前辈说测试前途是IT里最low的,我慌了......

互联网行业的技术岗位一般分为研发、测试和运维,虽然前些年测试一直都不如研发岗位那么吃香。但现在随着国内对软件测试的重视,我国互联网企业对软件测试的需求在未来还将继续增大。听起来软件测试的就业形势一片大好,那么到底软件测试的发展…...

CNI 网络流量 5.1 Cilium 介绍和原理

文章目录简介安装组件和原理Cilium-agent初始化IPAMCNICilium cli 的使用bpfMap 的操作Cilium-agentEbpf简介 Cilium 是一个用于容器网络领域的开源项目,主要是面向容器而使用,用于提供并透明地保护应用程序工作负载(如应用程序容器或进程&a…...

机加行业MES解决方案,助力企业打造数字化透明车间

机械加工行业的主要原材料占整个生产物料成本的95%~99%,以挖掘机为例,原材料有各种规格的钢板、焊丝、焊条、油漆以及各种气体等,其中主要原材料是钢板,占原材料比率的98%以上。 因此机械加工mes的原材料管理是机械加工行业信息化…...

C/C++每日一练(20230227)

目录 1. 按要求排序数组 ★ 2. Z 字形变换 ★★ 3. 下一个排列 ★★ 1. 按要求排序数组 给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中,数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小…...

总结SpringBoot1.x迁移到2.x需要注意的问题

SpringBoot1.x和SpringBoot2.x版本差异化还是比较大的,有些三方依赖组件有些是基于2.0版本为标准升级的,当我们将项目由1.0升级到2.0时会出现依赖的方法不存在或方法错误,需要逐个去调整,下面总结了我们升级实践过程中遇到的一些问…...

Api接口小知识

应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中控系统)或者后台不同的系统之间的交互点。包括外部接口、内部接口、内部接口有包括&…...

「JVM 高效并发」Java 协程

Java 语言抽象和隐藏了各种操作系统线程差异性的接口,这曾经是它区别于其他编程语言的一大优势,但在某些场景下,却已经出现了疲态; 文章目录1. 内核线程的局限2. 协程的复苏3. Java 的解决方案1. 内核线程的局限 在微服务架构中&…...

Web Spider案例 网洛者 第一题 JS混淆加密 - 反hook操作 练习(五)

文章目录一、资源推荐二、第一题 JS混淆加密 - 反hook操作2.1 过控制台反调试(debugger)2.2 开始逆向分析三、python具体实现代码四、记录一下,execjs调用混淆JS报错的问题总结提示:以下是本篇文章正文内容,下面案例可供参考 一、资源推荐 …...

前端基础之CSS扫盲

文章目录一. CSS基本规范1. 基本语法格式2. 在HTML引入CSS3. 选择器分类二. CSS常用属性1. 文本属性2. 文本格式3. 背景属性4. 圆角矩形和圆5. 元素的显示模式6. CSS盒子模型7. 弹性布局光使用HTML来写一个前端页面的话其实只是写了一个大体的框架, 整体的页面并不工整美观, 而…...

mysql组复制、mysql路由器、mysql的MHA高可用

文章目录前言一、mysql组复制1.实验机配置2.测试二、mysql路由器三、mysql之MHA高可用1.MHA概念1.创建一主两从集群2.MHA部署3.故障切换前言 一、mysql组复制 1.实验机配置 server1配置 首先停止数据库 [rootserver1 mysql]# /etc/init.d/mysqld stop Shutting down MySQL..…...

一篇搞懂springboot多数据源

好文推荐 https://zhuanlan.zhihu.com/p/563949762 mybatis 配置多数据源 参考文章 https://blog.csdn.net/qq_38353700/article/details/118583828 使用mybatis配置多数据源我接触过的有两种方式,一种是通过java config的方式手动配置两个数据源,…...

Verilog 数据类型和数组简介

在这篇文章将讨论 verilog 中最常用的数据类型,包括对数据表示,线网类型、变量类型,向量类型和数组的讨论。尽管 verilog 被认为是一种弱类型语言(loosely typed),但设计者仍必须在 Verilog 设计中为每个端…...

【数据结构】时间复杂度和空间复杂度以及相关OJ题的详解分析

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录1.算法效率1.1 如何衡…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...