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

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

相关文章

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

Java 中的跨域问题解决方法

《Java中的跨域问题解决方法》跨域问题本质上是浏览器的一种安全机制,与Java本身无关,但Java后端开发者需要理解其来源以便正确解决,下面给大家介绍Java中的跨域问题解决方法,感兴趣的朋友一起... 目录1、Java 中跨域问题的来源1.1. 浏览器同源策略(Same-Origin Policy)1.

如何解决yum无法安装epel-release的问题

《如何解决yum无法安装epel-release的问题》:本文主要介绍如何解决yum无法安装epel-release的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录yum无法安装epel-release尝试了第一种方法第二种方法(我就是用这种方法解决的)总结yum

python3 pip终端出现错误解决的方法详解

《python3pip终端出现错误解决的方法详解》这篇文章主要为大家详细介绍了python3pip如果在终端出现错误该如何解决,文中的示例方法讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下... 目录前言一、查看是否已安装pip二、查看是否添加至环境变量1.查看环境变量是http://www.cppcns

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题

《Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题》:本文主要介绍Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录一、前言二、系统架构检测三、卸载旧版 Go四、下载并安装正确版本五、配置环境变量六、验证安装七、常见

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决

springboot+vue项目怎么解决跨域问题详解

《springboot+vue项目怎么解决跨域问题详解》:本文主要介绍springboot+vue项目怎么解决跨域问题的相关资料,包括前端代理、后端全局配置CORS、注解配置和Nginx反向代理,... 目录1. 前端代理(开发环境推荐)2. 后端全局配置 CORS(生产环境推荐)3. 后端注解配置(按接口

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.