📄 银行家.txt
字号:
#include "stdio.h"
#include "stdlib.h"
#define n 5
#define m 3
int main()
{
int i,j;
int flag=1;
int request;
int change=0;
int k=0;
int count=0;
int available[m]={3,3,2}; /*初始资源分配状态*/
int max[n][m]={7,5,3,3,2,2,9,0,2,2,2,2,4,3,3};
int al本地[n][m]={0,1,0,2,0,0,3,0,2,2,1,1,0,0,2};
int need[n][m];
int work[m];
printf("available:\n");
for(i=0;i<m;i++)
{
printf(" %d ",available[i]);
}
printf("\n");
printf("max:\n");
for(i=0;i<n;i++)
{
printf("process %d:",i);
for(j=0;j<m;j++)
{
printf(" %d" ,max[i][j]);
}
printf("\n");
}
for (i=0;i<m;i++)
work[i]=available[i];
int finish[n];
for (i=0;i<n;i++)
finish[i]=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
need[i][j]=max[i][j]-al本地[i][j];
printf("now need:\n");
for(i=0;i<n;i++)
{
printf("process %d:",i);
for(j=0;j<m;j++)
{
printf(" %d" ,need[i][j]);
}
printf("\n");
}
printf("Do you want to change the need(1/0):");
scanf("%d",&change);
if(change==1)
{
printf("Enter process request:");
scanf("%d",&request);
printf("\nEnter request sources:");
for(j=0;j<m;j++)
{
scanf("%d" ,&need[request][j]);
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
max[i][j]=need[i][j]+al本地[i][j];
}
printf("\n");
while(k<n)
{
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(need[i][j]>work[j]) flag=0;
}
if(finish[i]==0 && flag==1)
{
for(j=0;j<m;j++)
{
work[j]+=al本地[i][j];
finish[i]=1;
}
printf("this is process %d\n",i);
k++;
}
flag=1;
}
count++;
if(count>=n) break;
}
flag=1;
for(i=0;i<n;i++)
{
if(finish[i]==0) flag=0;
}
if(flag==1) printf("it is safe\n");
else printf("unsafe\n");
getchar();
}
#include<stdio.h>
typedef struct
{
int x;
int requ[4];
}REQUEST;
void detect(int allocation[][4],int available[4],int need[][4]);
main()
{
int i,j;
int allocation[5][4]={{3,0,1,1},{0,1,0,0},{1,1,1,0},{1,1,0,1},{0,0,0,0}};
int need[5][4]={{1,1,0,0},{0,1,1,2},{3,1,0,0},{0,0,1,0},{2,1,1,0}};
int available[4]={1,0,2,0};
REQUEST req;
printf("please input the NO. of process: ");
scanf("%d",&req.x);
i=req.x;
printf("please input the resouces of request:");
scanf("%d,%d,%d,%d",&req.requ[0],&req.requ[1],&req.requ[2],&req.requ[3]);
if(req.requ[0]<=need[i][0]
&&req.requ[1]<=need[i][1]
&&req.requ[2]<=need[i][2]
&&req.requ[3]<=need[i][3])
{ if(req.requ[0]<=available[0]
&&req.requ[1]<=available[1]
&&req.requ[2]<=available[2]
&&req.requ[3]<=available[3])
{for(j=0;j<4;j++)
{ available[j]=available[j]-req.requ[j];
allocation[i][j]=allocation[i][j]+req.requ[j];
need[i][j]=need[i][j]-req.requ[j];
}
detect(allocation,available,need);
}
printf("there are not enough available resouces!");
exit(1);
}
printf("The resouces of request have been beyond the max number needed!");
}
void detect(int allocation[][4],int available[4],int need[][4])
{
int t,n,j,e;
int work[4];
int finish[5]={0,0,0,0,0};
for(t=0;t<4;t++)
work[t]=available[t];
for(n=0;n<5;n++)
{ if(finish[n]==0
&&need[n][0]<=work[0]
&&need[n][1]<=work[1]
&&need[n][2]<=work[2]
&&need[n][3]<=work[3])
{
for(j=0;j<4;j++)
work[j]=work[j]+allocation[n][j];
finish[n]=1;
n=-1;/*从0再次循环*/
}
}
for(e=0;e<5;e++)
{ if(finish[e]==1)
;
else
{for(e=0;e<5;e++)
printf("%d",finish[e]);
printf("the system is not safe!");
exit(1);
}
}
printf("the system is safe!");
exit(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -