#include<stdio.h>
#define n 5 //进程数目
#define m 3 //资源种类
#define TRUE 1
#define FALSE 0
typedef struct
{
int Max[m];
int Allocation[m];
int Need[m];
}PCB;
void main()
{
int compare(int A[m],int B[m]);
void add(int A[m],int B[m]);
void subtract(int A[m],int B[m]);
int search(int pcb[],int k);
int safe(PCB P[],int Available[]);
int stop=1;
int Request[m]; //请求向量
int Pcbnu=-1; //进程序号
PCB P[n];
//-----------------------------------------------
int i=0,j=0;
//初始化
int resources[n][3*m];//={{7,5,3,0,1,0,7,4,3},{3,2,2,2,0,0,1,2,2},{9,0,2,3,0,2,6,0,0},{2,2,2,2,1,1,0,1,1},{4,3,3,0,0,2,4,3,1}};
printf("请输入进程的资源信息(有5个进程,一共有三种资源,分别输入MAX、Allocation、Need的资源数)");
for(i=0;i<n;i++)
for(j=0;j<3*m;j++)
scanf("%d",&resources[i][j]);
int Available[m];//={3,3,2};
printf("请输入系统可用的资源数");
for(j=0;j<m;j++)
scanf("%d",&Available[j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
(P[i]).Max[j]=resources[i][j];
(P[i]).Allocation[j]=resources[i][m+j];
(P[i]).Need[j]=resources[i][2*m+j];
}
}
//-----------------子函数测试部分结束下为银行家算法主体部分-----
while(stop)
{
printf("输入进程序号\n");
scanf("%d",&Pcbnu);
printf("一次性输入请求向量的m种资源的个数\n");
for(i=0;i<m;i++)
scanf("%d",&Request[i]);
if(compare(Request,Available)&&compare(Request,P[Pcbnu].Need))
{
subtract(Available,Request);
add((P[Pcbnu]).Allocation,Request);
subtract((P[Pcbnu]).Need,Request);
if(!safe(P,Available))
{
printf("资源分配后系统处于不安全状态,本次请求失败\n");
//-----------------恢复原来资源分配状态-------------------------