银行家算法(操作系统 Java版)
Posted Huterox
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了银行家算法(操作系统 Java版)相关的知识,希望对你有一定的参考价值。
文章目录
前言
这个就没啥了,俺是来水博文的~
数据结构
这个银行家算法的原理很简单,我这里就不说了,代码有注释的。
主要是我这里的几个数据结构
就这几个,含义的话和操作系统书上的一样。
整体实现也很简单,就是几个for循环的事情。
实现
import java.util.ArrayList;
public class 银行家算法
//我们假设有5个进程p0,1,2,3,4
//有三个资源A,B,C 10 5 7
static int[] Resource=10,5,7;
static int[][] Claim;
static int[][] Allocation;
static int[][] Need;
static int[] Available;
static boolean[] Used;
static ArrayList<Integer> Order = new ArrayList<>();
public static void Init()
//这是一个初始化方法,负责模拟我们的初始化情况
//我们还是来个最直接方法吧
Claim=new int[][]7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;
Allocation = new int[][]0,1,0,2,0,0,3,0,2,2,1,1,0,0,2;
Need = new int[5][3];
ComNeed();
Available = new int[3];
ComAvailable();
Used = new boolean[5];
public static void ComAvailable()
//计算剩下多少个东西
int[] count = new int[3];
for (int i = 0; i < Allocation.length; i++)
for (int j = 0; j < Allocation[i].length; j++)
count[j]+=Allocation[i][j];
for (int i = 0; i < Resource.length; i++)
Available[i] = Resource[i]-count[i];
public static void ComNeed()
//计算需要的那个Need
for(int i=0;i<Claim.length;i++)
for(int j=0;j<Claim[i].length;j++)
Need[i][j] = Claim[i][j] - Allocation[i][j];
public static void show()
//这个是负责显示我们模拟的这个情况
System.out.println(Order.toString());
public static int find()
int index = -1;
//负责找到可以给资源的那个进程对应的下标
for (int i = 0; i < Need.length; i++)
boolean flag = true;
for (int j = 0; j < Need[i].length; j++)
if(Used[i]) continue;
if(Need[i][j]>Available[j])
flag=false;
break;
if(flag)
index = i;
return index;
return index;
public static void addAvailable(int index)
for (int i = 0; i < Available.length; i++)
Available[i] += Need[index][i];
public static void update()
//负责更新
while (true)
int ok_run = find();
if(ok_run!=-1)
Used[ok_run] = true;
Order.add(ok_run);
addAvailable(ok_run);
if(Order.size()==5)
System.out.println("执行完毕");
show();
return;
else
System.out.println("无法分配");
show();
return;
public static void main(String[] args)
Init();
update();
效果
以上是关于银行家算法(操作系统 Java版)的主要内容,如果未能解决你的问题,请参考以下文章