解决死锁——银行家算法透析

2023-10-27 21:40

本文主要是介绍解决死锁——银行家算法透析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
避免死锁算法中最有代表性的算法是Dijkstra E.W 于1968年提出的银行家算法

下面我们将从例题中一点一点的分析:

在这里插入图片描述
解题:

第一步:求出初始剩余资源数

图中有四种资源,分别是 A、B、C、D。题中只是给出了每个资源的总数量,没有给出剩余资源数(一般题中会给出),那么我们将它求出,每个资源总数减去每个资源已被分配资源数就得到各自资源的剩余资源数。

这里得出的是:
A 资源已被分配2,
B资源已被分配6,
C资源已被分配12,
D资源已被分配12。

那么总数量减去已被分配的得出:
A资源 3-2=1
B资源 12-6=6
C资源 14-12=2
D资源 14-12=2

最后得到初始剩余资源数 (1,6,2,2)

第二步:求出各个进程的需求资源数量

在这里插入图片描述

第三步:比较

我们先检查A选项

P1 P4 P5 P2 P3

第一个是 进程P1
我们可以在第二步看出
进程P1需求的资源数量为 (0,0,1,2)
那么初始初始剩余资源数 (1,6,2,2) 每个值大于 (0,0,1,2),那么P1是安全序列。

第二个是 进程P4
我们将上一个进程的剩余资源数 (1,6,2,2) 加上上一个进程的已分配资源数量 (0,0,3,2) 得出剩余资源量 (1,6,5,4)
将剩余资源量 (1,6,5,4) 与P4需求资源量 (0,6,5,2) 相比较,每个值都大于。那么P4是安全序列

第三个是 进程P5
我们将上一个进程的 剩余资源量 **(1,6,5,4)**加上上一个进程的已分配资源数量 **(0,3,3,2)**得出剩余资源数
(1,9,8,6)
将剩余资源数 (1,9,8,6) 与P5需求资源量 (0,6,5,6) 相比较,每个值都大于。那么P5是安全序列

第四个是进程P2
我们将上一个进程的 剩余资源量 **(1,9,8,6)**加上上一个进程的已分配资源数量 **(0,0,1,4)**得出剩余资源数
(1,9,9,10)
将剩余资源数 **(1,9,9,10)**与P2需求资源量 (1,7,5,0) 相比较,每个值都大于。那么P2是安全序列

最后一个是进程P3
我们将上一个进程的 剩余资源量 **(1,9,9,10)**加上上一个进程的已分配资源数量 **(1,0,0,0)**得出剩余资源数
(2,9,9,10)
将剩余资源数 **(2,9,9,10)**与P3需求资源量 (2,3,5,6) 相比较,每个值都大于。那么P3是安全序列

那么A选项正确

按照这个思路,B选项也正确,B选项只是将进程P5跟P2调换了位置。

其余不正确。


总结:

剩余的资源数大于或者等于进程需求的资源数才是安全序列。

剩余的资源数: 剩余资源数量=资源的数量-已分配资源数量
需求资源数: 最大资源需求量-已分配资源数量

这篇关于解决死锁——银行家算法透析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/288581

相关文章

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二: