银行家算法 c语言代码安全算法
时间: 2023-07-03 10:29:28 浏览: 93
以下是银行家算法的 C 语言代码,包含了安全性检查:
```c
#include<stdio.h>
#include<stdlib.h>
int main()
{
int p,r,i,j,k,count,flag=1;
printf("Enter the no of processes: ");
scanf("%d",&p);
printf("Enter the no of resources: ");
scanf("%d",&r);
int *avail=(int*)malloc(r*sizeof(int));
int *req=(int*)malloc(r*sizeof(int));
int **alloc=(int **)malloc(p*sizeof(int *));
int **max=(int **)malloc(p*sizeof(int *));
int **need=(int **)malloc(p*sizeof(int *));
int *finish=(int*)malloc(p*sizeof(int));
int *safe_seq=(int*)malloc(p*sizeof(int));
for(i=0;i<p;i++)
{
alloc[i]=(int*)malloc(r*sizeof(int));
max[i]=(int*)malloc(r*sizeof(int));
need[i]=(int*)malloc(r*sizeof(int));
}
printf("Enter the allocation matrix:\n");
for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
scanf("%d",&alloc[i][j]);
}
}
printf("Enter the maximum matrix:\n");
for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
scanf("%d",&max[i][j]);
need[i][j]=max[i][j]-alloc[i][j];
}
}
printf("Enter the available resources:\n");
for(i=0;i<r;i++)
{
scanf("%d",&avail[i]);
}
for(i=0;i<p;i++)
{
finish[i]=0;
}
count=0;
while(count<p)
{
flag=0;
for(i=0;i<p;i++)
{
if(finish[i]==0)
{
flag=1;
for(j=0;j<r;j++)
{
if(need[i][j]>avail[j])
{
flag=0;
break;
}
}
if(flag==1)
{
safe_seq[count]=i;
count++;
finish[i]=1;
for(k=0;k<r;k++)
{
avail[k]+=alloc[i][k];
}
}
}
}
if(flag==0)
{
printf("System is in unsafe state.\n");
exit(0);
}
}
printf("System is in safe state.\nSafe sequence is: ");
for(i=0;i<p;i++)
{
printf("%d ",safe_seq[i]);
}
printf("\n");
return 0;
}
```
其中,每个进程需要的资源数和当前已经分配的资源数通过输入的方式进行读取,而安全性检查的部分使用了一个 `flag` 变量来判断系统是否处于不安全状态,如果 `flag` 为 0,则表示系统处于不安全状态,程序将直接退出。同时,为了避免出现内存泄漏,程序结束时需要手动释放动态分配的内存。
阅读全文