银行家算法的实现
来源:互联网 发布:数据库分区和分表 编辑:程序博客网 时间:2024/05/22 12:26
import java.util.Scanner;
public class Bank {
int Available[];//可利用资源向量
int Max[][];//最大需求矩阵
int Allocation[][];//分配矩阵
int Need[][];//需求矩阵
int Request[];//请求向量
int Work[];//工作变量,记录可用资源
boolean Finish[];//工作变量,记录进程是否执行完
static int a;
static int b;
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
System.out.println("请输入资源种类数");
int j=sc.nextInt();
System.out.println("请输入进程数");
int i=sc.nextInt();
System.out.println("请输入系统拥有的总资源数");
int c=sc.nextInt();
for(int b=0;b<i;b++)
{
for(int a=0;a<j;a++)
{
System.out.println("请输入第"+b+" 个进程第"+a+"类需要多少资源");
int k=sc.nextInt();
System.out.println("请输入第"+b+" 个进程第"+a+"类分配到多少资源");
int d=sc.nextInt();
System.out.println("请输入第"+b+" 个进程第"+a+"类还需要多少资源");
int e=sc.nextInt();
Bank ban=new Bank(k,b,a,i,j,c,d,e);
ban.bank();
}
}
sc.close();
}
public Bank(int k,int b,int a,int i,int j,int c,int d,int e)//赋值传参
{
Available=new int[j];
Max=new int[i][j];
Allocation=new int[i][j];
Need=new int[i][j];
Request=new int[j];
Available[a]=c;
Request[a]=k;
Allocation[b][a]=d;
Need[b][a]=e;
Work=new int[j];
Finish=new boolean[i];
Work[a]=Available[a];
Finish[b]=false;
}
@SuppressWarnings("unused")
void bank()//银行家算法实现
{
if(Request[a]<=Need[b][a])//进程申请的资源有没有超过声明的最大量
{
if(Request[a]<=Available[a])//判断资源够不够
{
Available[a]= Available[a]- Request[a];
Allocation[b][a]= Allocation[b][a]+ Request[b];
Need[b][a]= Need[b][a]- Request[a];//试分配
while(true)
{
if(Finish[b]=false&&Need[b][a]<=Work[a])//执行安全算法
{
Work[a]=Work[a]+Allocation[b][a];
Finish[b]=true;
System.out.println("第"+b+"个进程顺利执行完毕");
continue;
}
else
{
if(Finish[b]=true)
{
System.out.println("系统处于安全状态");
}
else
{
System.out.println("系统处于不安全状态");
}
break;
}
}
}
else
{
System.out.println("系统资源不够,需等待");
}
}
else
{
System.out.println("申请资源出错");
}
}
}
public class Bank {
int Available[];//可利用资源向量
int Max[][];//最大需求矩阵
int Allocation[][];//分配矩阵
int Need[][];//需求矩阵
int Request[];//请求向量
int Work[];//工作变量,记录可用资源
boolean Finish[];//工作变量,记录进程是否执行完
static int a;
static int b;
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
System.out.println("请输入资源种类数");
int j=sc.nextInt();
System.out.println("请输入进程数");
int i=sc.nextInt();
System.out.println("请输入系统拥有的总资源数");
int c=sc.nextInt();
for(int b=0;b<i;b++)
{
for(int a=0;a<j;a++)
{
System.out.println("请输入第"+b+" 个进程第"+a+"类需要多少资源");
int k=sc.nextInt();
System.out.println("请输入第"+b+" 个进程第"+a+"类分配到多少资源");
int d=sc.nextInt();
System.out.println("请输入第"+b+" 个进程第"+a+"类还需要多少资源");
int e=sc.nextInt();
Bank ban=new Bank(k,b,a,i,j,c,d,e);
ban.bank();
}
}
sc.close();
}
public Bank(int k,int b,int a,int i,int j,int c,int d,int e)//赋值传参
{
Available=new int[j];
Max=new int[i][j];
Allocation=new int[i][j];
Need=new int[i][j];
Request=new int[j];
Available[a]=c;
Request[a]=k;
Allocation[b][a]=d;
Need[b][a]=e;
Work=new int[j];
Finish=new boolean[i];
Work[a]=Available[a];
Finish[b]=false;
}
@SuppressWarnings("unused")
void bank()//银行家算法实现
{
if(Request[a]<=Need[b][a])//进程申请的资源有没有超过声明的最大量
{
if(Request[a]<=Available[a])//判断资源够不够
{
Available[a]= Available[a]- Request[a];
Allocation[b][a]= Allocation[b][a]+ Request[b];
Need[b][a]= Need[b][a]- Request[a];//试分配
while(true)
{
if(Finish[b]=false&&Need[b][a]<=Work[a])//执行安全算法
{
Work[a]=Work[a]+Allocation[b][a];
Finish[b]=true;
System.out.println("第"+b+"个进程顺利执行完毕");
continue;
}
else
{
if(Finish[b]=true)
{
System.out.println("系统处于安全状态");
}
else
{
System.out.println("系统处于不安全状态");
}
break;
}
}
}
else
{
System.out.println("系统资源不够,需等待");
}
}
else
{
System.out.println("申请资源出错");
}
}
}
0 0
- 银行家算法的实现
- 银行家算法的实现
- 银行家算法的模拟实现
- 银行家算法的C实现
- 银行家算法的C++实现
- 银行家算法的简单实现
- C_银行家算法的实现
- [C#]银行家算法的实现
- C#的银行家算法的实现
- 对银行家算法的一种实现
- 银行家算法的C语言实现
- 银行家算法的java编程实现
- 关于银行家算法的模拟实现
- 银行家算法的数组方式实现
- 银行家算法的Python简单实现
- 银行家算法实现
- 银行家算法实现
- 银行家算法:c++实现
- 【springmvc+mybatis项目实战】杰信商贸-32.出口报运修改+报运货物批量展现-批量修改控件1
- 学习路上之初识MongoDB
- 【springmvc+mybatis项目实战】杰信商贸-33.出口报运修改+报运货物批量展现-批量修改控件2
- having 和group by
- CCSpriteBatchNode 是批处理节点
- 银行家算法的实现
- object_recognition
- hdu 2196 树形DP
- Xcode7~7.3.1 真机调试:An App ID with Identifier 'cn.a12study.jcjy' is not available. Please enter a dif
- 【springmvc+mybatis项目实战】杰信商贸-34.业务出口报运WebService1
- codeforce 241div2 D
- 企业版app在iOS8上无法安装的几个问题解决
- Kafka学习5_server.properties系统配置说明
- xtrabackup 详解(转)