银行家算法

银行家算法是解决操作系统中死锁问题的一种避免策略,它通过确保系统始终处于安全状态来防止死锁。算法核心在于寻找安全序列,确保所有进程能完成执行。文章介绍了算法背景、关键变量、流程图,并提供了代码实现和运行实例,帮助读者深入理解这一概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.背景知识

银行家算法是死锁避免的经典算法,其核心思想是:进程动态地申请资源,每次申请资源时系统都执行安全状态检查算法判断本次申请是否会造成系统处于不安全状态,如果不安全则阻塞进程;如果安全状态,则完成资源分配。
安全状态检查算法的思想是找到一个安全序列,使所有进程都能执行完毕。如果找到,则处于安全状态,否则为不安全状态。

下列有个生活实例能帮你很快了解银行家算法的应用情形:

如果有3个公司甲、乙、丙,分别需要200万、100万、300万作为项目启动资金,并已分别向银行贷款120万、60万、200万,现银行只能再拿出共60万贷款给这3个公司,问银行怎样分配这60万才能满足甲、乙、丙的总需求。

公司 总需求 已贷款 还需
200万 120万 80万
100万 60万 40万
300万 200万 100万
    假设把60万都给甲,那么甲有了180万,但还是没有达到200万,银行也没更多的钱给乙和丙,这时就产生了一个死锁问题。
如果银行先给乙40万,乙就达到了需求100万,等乙完成项目还给银行100万,银行就有120万能给甲和丙,这样就能顺利解决这个
问题。即贷款顺序为乙->甲->丙。

上述银行分配贷款的过程就是银行家算法应用的过程。

2.主要变量解释及银行家算法流程图

以上述问题为例:
int Available[100];//可利用资源数组(贷款总数60万)
int Max[50][100];//最大需求矩阵(总需求)
int Allocation[50][100];//分配矩阵(已贷款)
int Need[50][100];//需求矩阵(还需)
int Request[50][100];//第m个进程还需要n类资源的数量(公司主动请求贷款量,上述未体现)
int p[50];//各进程(各公司)

在这里插入图片描述

3.代码实现

#include <iostream>

using namespace std;

int Available[100];//可利用资源数组
int Max[50][100];//最大需求矩阵
int Allocation[50][100];//分配矩阵
int Need[50][100];//需求矩阵
int Request[50][100];//第m个进程还需要n类资源的数量
int Finish[50];//表示系统是否有足够的资源分配给进程来使之运行完成
int p[50];//各进程
int m, n;//m个进程,n类资源

bool safe()//安全性算法
{
   
   
	int i, j, v = 0;
	int Work[100];//可利用资源数组
	for (i = 0; i < n; i++)
		Work[i] = Available[i];
	for (i = 0; i < m; i++)
		Finish[i] = false;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值