200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > c语言银行家算法模拟程序 银行家算法C语言模拟程序

c语言银行家算法模拟程序 银行家算法C语言模拟程序

时间:2023-10-13 15:48:09

相关推荐

c语言银行家算法模拟程序 银行家算法C语言模拟程序

#include

#include

#include

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];//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;//统计Finish[i]==true的个数

}

if (f==m)

{

printf("safe static");

f=0;//将计数器f重新初始化,为下一次提出新的进程申请做准备

}

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("nn系统剩余资源量: ");

for(i=1;i<=n;i++)

{

printf(" %d ",Available[i]);

}

printf("n");

}

void main()

{ int k,h=1;

while(h)

{system("cls");

{

printf("nn ★ 欢迎使用本程序 ★n");

printf("nn1:输入系统的资源数、申请进程数、每个类资源的实例数");

printf("n2:……………………………………输入进程的资源申请");

printf("n3:……………………………………………输出系统状态");

printf("n4:…………………………………………………退出程序");

printf("nn 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("nn 谢谢使用 n");

printf("nnSee you next time!!!nnn");

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。