银行家算法代码c语言编写
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
printf("%2d",i);
printf(" ");
for(j=0;j<m; j++)
printf("%2d",allocation[i][j]);
printf(" ");
for(j=0;j<m; j++)
printf("%2d",need[i][j]);
printf("\n");
}
}
}
void print() //输出可用资源数目
printf("%d",need[i][j]);
}
printf("\n");
}
printf("\n输入可用资源数:\n");
for (i=0;i<m; i++)
scanf("%d", &available[i]);
testout(); //检测已知的状态是否安全
if (r==1) //如果状态安全则执行以下代码
printf("输入已分配资源数:\n");
for(i=0;i<n; i++)
for(j=0;j<m; j++)
scanf("%d", &allocation[i][j]);
printf("输出还需要的资源数:\n");
for (i=0;i<n; i++)
{
for(j=0;j<m; j++)
{
need[i][j]=max[i][j]-allocation[i][j];
p=1; //判断是否超过最大资源数
if(p)
printf("请求超过最大资源数!\n");
else
{
for(j=0;j<m; j++)
if(request[j]>available[j])
q=1; //判断是否超过可用资源数
if(q)
printf("没有足够的可用资源!\n");
else
{
for(j=0;j<m; j++)
printf("输入进程总数:\n");
scanf("%d", &n);
printf("输入资源种类总数:\n");
scanf("%d", &m);
printf("输入最大矩阵:\n");
for(i=0;i<n; i++)
for(j=0;j<m; j++)
scanf("%2d",&max[i][j]);
{
printf("可用资源是: \n");
for(j=0;j<m; j++)
printf("%2d ",available[j]);
printf("\n");
}
void main()
{
int p,q;
int request[M], allocation1[M][M],need1[M][M],available1[M];
#define M 100
#include<stdio.h>
int max[M][M],allocation[M][M],need[M][M],available[M];
int i,j,n,m,r;
void testout() //算法安全性的检测
{ int k,flag,v=0;
int work[M],a[M];
{ available1[j]=available[j]; //保存原已分配的资源数,需要的资源数,和可用的资源数
allocation1[i][j]=allocation[i][j];
need1[i][j]=need[i][j];
available[j]=available[j]-request[j]; //系统尝试把资源分配给请求的进程
{
printf("系统不安全. \n");
r=0;
}
else //否则为安全状态
{
printf("系统是安全的.\n");
printf("输出安全序列:\n");
for (i=0;i<n;i++)
printf ("%d ",a[i]); //输出安全序列
printf("\n");
for (i=0;i<n; i++)
allocation[i][j]=allocation[i][j]+request[j];
need[i][j]=need[i][j]-request[j];
}
print(); //输出可用资源数
testout(); //进行安全检测
if(r==0) //分配后状态不安全
{for (j=0;j<m; j++)
for (j=0;j<m; j++)
work[j]=work[j]+allocation[i][j]; //释放该进程已分配的资源
}
}
}
ຫໍສະໝຸດ Baiduk--;
}
flag=1;
for (i=0;i<n; i++) //判断是否所有的进程都完成
if (finish[i]=='F')
flag=0;
if (flag==0) //若有进程没完成,则为不安全状态
char finish[M];
r=1;
for(i=0;i<n; i++)
finish[i]='F'; //初始化各进程均没得到足够资源
for(j=0;j<m; j++)
work[j]=available[j]; //用work[j]表示可提供进程继续运行的各类资源数
k=n;
while(k>0)
{
for (i=0;i<n; i++)
{if (finish[i]=='F')
{ flag=1;
for (j=0;j<m; j++)
if (need[i][j]>work[j])
flag=0;
if (flag==1) //找到还没完成的且需求数小于可提供进程继续运行的
{ finish[i]='T'; //资源数的进程
a[v++]=i; //记录安全序列
{
while (1)
{ p=0;
q=0;
printf("\n输入请求资源的进程号: \n");
scanf("%d", &i);
printf("输入该进程所需的资源数:\n");
for(j=0;j<m; j++)
scanf("%d",&request[j]);
for(j=0;j<m; j++)
if(request[j]>need[i][j])
{ available[j]=available1[j]; //还原分配前的已分配的资源数,仍需要的资源数和可用的资源数
allocation[i][j]=allocation1[i][j];
need[i][j]=need1[i][j];
}
printf("不安全,请返回!\n");
print();
}
}
}
}
}
}
printf("%2d",i);
printf(" ");
for(j=0;j<m; j++)
printf("%2d",allocation[i][j]);
printf(" ");
for(j=0;j<m; j++)
printf("%2d",need[i][j]);
printf("\n");
}
}
}
void print() //输出可用资源数目
printf("%d",need[i][j]);
}
printf("\n");
}
printf("\n输入可用资源数:\n");
for (i=0;i<m; i++)
scanf("%d", &available[i]);
testout(); //检测已知的状态是否安全
if (r==1) //如果状态安全则执行以下代码
printf("输入已分配资源数:\n");
for(i=0;i<n; i++)
for(j=0;j<m; j++)
scanf("%d", &allocation[i][j]);
printf("输出还需要的资源数:\n");
for (i=0;i<n; i++)
{
for(j=0;j<m; j++)
{
need[i][j]=max[i][j]-allocation[i][j];
p=1; //判断是否超过最大资源数
if(p)
printf("请求超过最大资源数!\n");
else
{
for(j=0;j<m; j++)
if(request[j]>available[j])
q=1; //判断是否超过可用资源数
if(q)
printf("没有足够的可用资源!\n");
else
{
for(j=0;j<m; j++)
printf("输入进程总数:\n");
scanf("%d", &n);
printf("输入资源种类总数:\n");
scanf("%d", &m);
printf("输入最大矩阵:\n");
for(i=0;i<n; i++)
for(j=0;j<m; j++)
scanf("%2d",&max[i][j]);
{
printf("可用资源是: \n");
for(j=0;j<m; j++)
printf("%2d ",available[j]);
printf("\n");
}
void main()
{
int p,q;
int request[M], allocation1[M][M],need1[M][M],available1[M];
#define M 100
#include<stdio.h>
int max[M][M],allocation[M][M],need[M][M],available[M];
int i,j,n,m,r;
void testout() //算法安全性的检测
{ int k,flag,v=0;
int work[M],a[M];
{ available1[j]=available[j]; //保存原已分配的资源数,需要的资源数,和可用的资源数
allocation1[i][j]=allocation[i][j];
need1[i][j]=need[i][j];
available[j]=available[j]-request[j]; //系统尝试把资源分配给请求的进程
{
printf("系统不安全. \n");
r=0;
}
else //否则为安全状态
{
printf("系统是安全的.\n");
printf("输出安全序列:\n");
for (i=0;i<n;i++)
printf ("%d ",a[i]); //输出安全序列
printf("\n");
for (i=0;i<n; i++)
allocation[i][j]=allocation[i][j]+request[j];
need[i][j]=need[i][j]-request[j];
}
print(); //输出可用资源数
testout(); //进行安全检测
if(r==0) //分配后状态不安全
{for (j=0;j<m; j++)
for (j=0;j<m; j++)
work[j]=work[j]+allocation[i][j]; //释放该进程已分配的资源
}
}
}
ຫໍສະໝຸດ Baiduk--;
}
flag=1;
for (i=0;i<n; i++) //判断是否所有的进程都完成
if (finish[i]=='F')
flag=0;
if (flag==0) //若有进程没完成,则为不安全状态
char finish[M];
r=1;
for(i=0;i<n; i++)
finish[i]='F'; //初始化各进程均没得到足够资源
for(j=0;j<m; j++)
work[j]=available[j]; //用work[j]表示可提供进程继续运行的各类资源数
k=n;
while(k>0)
{
for (i=0;i<n; i++)
{if (finish[i]=='F')
{ flag=1;
for (j=0;j<m; j++)
if (need[i][j]>work[j])
flag=0;
if (flag==1) //找到还没完成的且需求数小于可提供进程继续运行的
{ finish[i]='T'; //资源数的进程
a[v++]=i; //记录安全序列
{
while (1)
{ p=0;
q=0;
printf("\n输入请求资源的进程号: \n");
scanf("%d", &i);
printf("输入该进程所需的资源数:\n");
for(j=0;j<m; j++)
scanf("%d",&request[j]);
for(j=0;j<m; j++)
if(request[j]>need[i][j])
{ available[j]=available1[j]; //还原分配前的已分配的资源数,仍需要的资源数和可用的资源数
allocation[i][j]=allocation1[i][j];
need[i][j]=need1[i][j];
}
printf("不安全,请返回!\n");
print();
}
}
}
}
}
}