死锁的总结
哲学家死锁造成的原因:我有你需要的,但你已经有了
饥饿与死锁的区别
死锁一旦发生一定又饥饿现象,但是饥饿现象产生不一定是死锁
历史上对于死锁的声音
死锁的方案
前面两个都是不允许死锁出现
前面都是概念性的东西
后面我们研究如何破坏死锁
保守派思想:
保守派是如何解决死锁的,根据前面,我们知道他们的思想是从源头切断死锁的出现
我们根据锁的特性进行判断
第一个互斥使用,如果我们让进程之间不互斥使用,那么如果有相同堆的资源,我们可以共享的,那么可能会出现数据冲突。
第二个不可剥夺,如果进程内的资源可以被任意抢夺,那么如果一个进程在运行,那么资源被随意抢占了,如何确保资源不会出错,就算保存资源,那么大量的进程切换一样会浪费大量资源。
第三个占有和等待,如果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 如何衡…...
31--Vue-前端开发-Vue语法
一、前端-Vue介绍 1.前端介绍 1、HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面 ----> 给后端(PHP、Python、Go、Java) ----> 后端嵌入模板语法 ----> 后端渲染完数据 ----> 返回数据给前端 ----> 在浏览器中查看 2、Ajax的出现 -> 后台发送异…...
这份IC设计必读书单,值得所有IC设计工程师一看!
《综合与时序分析的设计约束》 作者:Sridhar Gangadharan 本书为集成电路时序约束设计的指南,指导读者通过指定的时序要求,充分发挥IC设计的性能。本书内容包括受时序约束的关键环节的设计流程、综合时序分析、静态时序分析和布局布线等。本书…...
Acwing 蓝桥杯 第一章 递归与递推
我上周在干什么,感觉我上周啥也没训,本来两天一次的vp也没v很寄啊,再这样下去真不行了先总结一下如何爆搜:先去确定好枚举的对象枚举的对象很重要!!这直接影响了复杂度然后就是去想递归树就好了一、确定状态…...
模型部署笔记
目录模型部署工作ONNX存在的意义ONNX(Open Neural Network Exchange)ONNX示例模型推理示例Batch调整量化量化方式常见问题模型部署工作 训练好的模型在特定软硬件平台下推理针对硬件优化和加速的推理代码 训练设备平台: CPU、GPU、DSP ONN…...
多线程之wait和notify
目录 1.wait()方法 2. notify方法 因为线程之间是抢占式执行的,所以线程之间执行的先后顺序难以预知。但是实际开发中,我们希望线程之间的执行顺序是能被掌控的,比如线程2开始之前,需要线程1的某个任务先被执行。也就是说,很多时…...
MVCC 当前读 快照读 RC read view RR下事务更新不会丢失
MVCC(multi-version-concurrent-control) MVCC是行锁的一个变种,但MVCC在很多情况下它避免了加锁。不是buffer块,而是buffer中的记录行。 MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制&#x…...
NCRE计算机等级考试Python真题(二)
第二套试题1、关于算法的描述,以下选项中错误的是A.算法具有可行性、确定性、有穷性的基本特征B.算法的复杂度主要包括时间复杂度和数据复杂度C.算法的基本要素包括数据对象的运算和操作及算法的控制结构D.算法是指解题方案的准确而完整的描述正确答案: …...
借助IBM Spectrum LSF为芯片行业大幅提升算力,预测未来
IBM Spectrum LSF 客户案例——上海开赟软件服务有限公司借助IBM Spectrum LSF为芯片行业大幅提升算力,预测未来 业务影响 中国芯片市场作为全球消费芯片市场重要组成部分,近年来发展迅猛。据国家统计局统计,2019年中国集成电路产量突破200…...
力扣-换座位
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:626. 换座位二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言 …...
DFT基本入门介绍
1.什么是DFT?2.为什么要做DFT?3.“测试”与“验证”的区别4.DFT的核心技术1)扫描路径设计(Scan Design)2)内建自测试(Bist)3)JTAG4)ATPG5.DFT工程师的岗位职责随着芯片的制程越来小(5nm), 芯片的规模越来越…...
java电商网站开发源码/站长之家是什么网站
for i in $( cd /proc;ls |grep "^[0-9]"|awk ‘ $0 >100‘) ;do awk ‘/Swap:/{aa$2}END{print ‘"$i"‘,a/1024"M"}‘ /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10可以看到pid18906的这个经常 占用了最多的swap然后 我们…...
贵阳优化网站建设/北京关键词优化服务
知识要点 在javascript中,表达式是短语,那么语句(statement)就是整句或命令。表达式计算出一个值,但语句用来执行以使某件事发生。 1.表达式语句 具有副作用的表达式是JavaScript中最简单的语句:赋值语句、…...
软件上传网站/东莞seo代理
最近数码圈新机发布的少,但操作系统却打的火热。这边鸿蒙OS2.0刚刚公测,那边Android 12系统就正式登场了。谷歌正式发布Android 12(1)开放的系统风格与操作界面这么多年以来,国产手机用的基本上都是安卓系统,虽然它们在此基础上设…...
百度推广 网站建设/seo网站关键词优化价格
sql中的取模,取整,字符串连接等操作:c a mod b ;//取模c trunc(a/b);//取整//连接两个字符串,sql中不能用号连接两个字符串c a || b;或c concat(a,b);----------------------------------------------------------关于Oracle取整的函数分别有以下几种:1.取整(大) select ce…...
做游戏直播什么游戏视频网站/永久免费不收费的污染app
1、变量名就像我们现实社会的名字,把一个值赋值给一个名字时,它会存储在内存中,称之为变量,大多数语言中,都把这种行为成为“给变量赋值”或“把值存储在变量中”。2、不过python与大多数其他计算机语言的做法稍有不同…...
做烘培网站/网络运营推广是做什么的
基本 shell是一个C语言编写的程序,我们可以用这个应用程序来访问操作系统内核的服务 shell脚本 shell脚本,是一种为shell编写的脚本程序,我们平时说的shell一般都是在说写shell脚本,而不是开发shell 下面我们利用shell,编写一个脚本,使得以后在iOS开发中可以快速的创建一个项目…...