📄 复件 yinhangjia.c
字号:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define false 0
#define true 1
int Available[10];
int Max[10][10];
int Allocation[10][10]={0};
int Need[10][10]={0};
int Work[10];
int Finish[10];
int Request[10][10];
int Pause[10];
int List[10];
int i,j;
int n;
int m;
int a;
int l,e;
int b=0,c=0,f=0,g;
void mainenter()
{
printf("请输入系统总共有的资源数:");
scanf("%d",&n);
printf("请输入总共有多少个进程:");
scanf("%d",&m);
for(i=1;i<=n;i++)
{
printf("第%d类资源有的资源实例:",i);
scanf("%d",&Available[i]);
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
printf("进程P[%d]对第%d类资源的最大需求量:",i,j);
scanf("%d",&Max[i][j]);
Need[i][j]=Max[i][j];
}
}
}
void mainrequest()
{
printf("请输入申请资源的进程:");
scanf("%d",&a);
for(i=1;i<=n;i++)
{
printf("请输入进程P[%d]对%d类资源的申请量:",a,i);
scanf("%d",&Request[a][i]);
if(Request[a][i]>Need[a][i])
printf("\n出错!进程申请的资源数多于它自己申报的最大量\n");
if(Request[a][i]>Available[i])
printf("\nP[%d]必须等待\n",a);
Available[i]=Available[i]-Request[a][i];
Allocation[a][i]=Allocation[a][i]+Request[a][i];
Need[a][i]=Need[a][i]-Request[a][i];
Work[i]=Available[i];
}
for(i=1;i<=m;i++)
{
Pause[i]=Available[i];
Finish[i]=false;
}
for(g=1;g<=m;g++)
{
for(i=1;i<=m;i++)
{
b=0;
for(j=1;j<=n;j++)
{
if(Need[i][j]<=Pause[j])
{
b=b+1;
}
if(Finish[i]==false&&b==n)
{
for(l=1;l<=n;l++)
{
Pause[l]=Pause[l]+Allocation[i][l];
}
Finish[i]=true;
printf("$$ %d ",i);
}
}
}
}
printf("\n");
for(i=1;i<=m;i++)
{
if(Finish[i]==true)
f=f+1;
}
if (f==m)
{
printf("safe static");
f=0;
}
else
{
printf("unsafe static");
for(i=1;i<=n;i++)
{
Available[i]=Available[i]+Request[a][i];
Allocation[a][i]=Allocation[a][i]-Request[a][i];
Need[a][i]=Need[a][i]+Request[a][i];
}
}
}
void mainprint()
{
printf("当前的系统状态\n");
printf(" 目前占有量 最大需求量 尚需要量 \n进程");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf(" %d类",j);
}
for(i=1;i<=m;i++)
{
printf("\nP[%d]",i);
for(j=1;j<=n;j++)
{
printf(" %d ",Allocation[i][j]);
}
for(j=1;j<=n;j++)
{
printf(" %d ",Max[i][j]);
}
for(j=1;j<=n;j++)
{
printf(" %d ",Need[i][j]);
}
}
printf("\n\n系统剩余资源量: ");
for(i=1;i<=n;i++)
{
printf(" %d ",Available[i]);
}
printf("\n");
}
void main()
{ int k,h=1;
while(h)
{ system("cls");
{
printf("\n\n ★ 欢迎使用本程序 ★\n");
printf("\n\n 1:输入系统的资源数、申请进程数、每个类资源的实例数");
printf("\n 2:…………………………………… 输入进程的资源申请");
printf("\n 3:…………………………………………… 输出系统状态");
printf("\n 4:………………………………………………… 退出程序");
printf("\n\n please choose ");
scanf("%d",&k);
}
switch(k)
{
case 1:mainenter(); break;
case 2:mainrequest(); break;
case 3:mainprint(); break;
case 4:h=0; break;
}
printf("\n");
system("pause");
}
system("cls");
printf("\n\n 谢谢使用 \n");
printf("\n\n See you next time!!!\n\n\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -