
黄毅然的JAVA学习(七)
发布日期:2021-05-06 15:15:00
浏览次数:12
分类:技术文章
本文共 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;iwork[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++; } //================================================// }}
有缘再见!
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月31日 12时38分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java有包名的类访问没有包名的类
2019-03-01
手把手教你用Python的NumPy包处理数据
2019-03-01
TIOBE 12月编程语言排行榜:Python有望第四次成为年度语言
2019-03-01
Python循环语句代码逐行详解:while、for、break和continue
2019-03-01
Java 十大排序算法
2019-03-03
整型关键字的散列映射
2019-03-03
多位水仙花数-python(出现运行超时?不妨用减法计算)
2019-03-03
地下迷宫探索(后两个测试点无法通过?这里有你想要的答案)
2019-03-03
城市间紧急救援(dijkstra算法)
2019-03-03
关键活动(注释超详细!!!)
2019-03-03
小白看完都会了!阿里云大师深入拆解Java虚拟机,看完这一篇你就懂了
2019-03-03
【IT之路】FAQ-Hibernate报错:表不存在
2019-03-03
【2020阿里云博客部署实战】如何远程连接和管理控制台基本介绍
2019-03-03
C程序举例:利用数组
2019-03-03
VBA之正则表达式(19)-- 相对引用转绝对引用
2019-03-03
巧用VBA统一数字单位
2019-03-03
Transpose实现数组行列转置的限制
2019-03-03
VBA中数组72变(随心所欲复制)
2019-03-03
[Golang]golang中自动锁的实现
2019-03-03
用float/double作为中转类型的“雷区”
2019-03-03