博客
关于我
黄毅然的JAVA学习(七)
阅读量:283 次
发布时间:2019-03-03

本文共 1890 字,大约阅读时间需要 6 分钟。

银行家算法的代码实现

黄毅然已经很久没有更过CSDN了

银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
安全序列是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。

代码实现

定义数据结构

public class pro {   	int finish=0;                //完成标志位	int[] max=new int[3];        //资源用量	int[] allocation=new int[3]; //已分配	int[] need=new int[3];       //需求量}

主函数及相关操作

import java.util.Scanner;public class OS_1 {   	public static void printline(int[] num) 	{   		System.out.print("执行顺序如下:\t");        for(int i : num)        {               System.out.printf("%d\t", i);        }        System.out.println('\n');    }	public static void main(String[] args)	{   		int i,j,n;		boolean s1=true;		Scanner input=new Scanner(System.in);		int[] work=new int[3];		System.out.print("可分配变量:\n");		for(i=0;i<3;i++)			work[i]=input.nextInt();		System.out.print("\n进程数:\n");		n=input.nextInt();		System.out.print("\n");		int[] line=new int[n];		for(i=0;i
work[i]) //=============================================//, { sum++; s1=true; //若资源无法满足进程,sum+1,结束对该进程的尝试 m++; break; } if(s1) continue; //跳出循环 process[m].finish=1; for(i=0;i<3;i++) work[i]=work[i]+process[m].allocation[i];//分配并回收资源 line[count]=m; //记录进程顺序 count++; sum=0; //重置失败尝试次数 } m++; } //================================================// }}

有缘再见!

转载地址:http://ynll.baihongyu.com/

你可能感兴趣的文章
java —— static 关键字
查看>>
在 Python 调试过程中设置不中断的断点 | Linux 中国
查看>>
AI 系统向自动化编码迈进 | Linux 中国
查看>>
使用 Jupyter Notebooks 构建一个远程管理控制台 | Linux 中国
查看>>
使用开源可视化工具来理解你的 Python 代码 | Linux 中国
查看>>
【2021 ECUG Con】聚势而来,与你相约花开时
查看>>
硬核观察 | 有人在比特币骗局中损失了 10 个比特币
查看>>
FreeDOS 的简单介绍 | Linux 中国
查看>>
使用 top 命令了解 Fedora 的内存使用情况 | Linux 中国
查看>>
怎样解决 “sub process usr bin dpkg returned an error code 1” 错误
查看>>
Bat:一种具有语法高亮和 Git 集成的 Cat 类命令 | Linux 中国
查看>>
Linux 上最好的五款音乐播放器 | Linux 中国
查看>>
网易云首倡中台方法论,发布全链路中台技术方案
查看>>
传输层协议
查看>>
如何加载dll文件计算UDS服务的秘钥
查看>>
细数哪些网络用户需要换IP?
查看>>
codeforces1307D 1900分最短路
查看>>
2020牛客暑期多校训练营(第九场)
查看>>
The 2016 ACM-ICPC Asia Dalian Regional Contest 部分题解
查看>>
8皇后问题 递归 函数调用是重点
查看>>