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

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

相关文章

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

Java报NoClassDefFoundError异常的原因及解决

《Java报NoClassDefFoundError异常的原因及解决》在Java开发过程中,java.lang.NoClassDefFoundError是一个令人头疼的运行时错误,本文将深入探讨这一问... 目录一、问题分析二、报错原因三、解决思路四、常见场景及原因五、深入解决思路六、预http://www