银行家算法 c语言代码 自己输入
时间: 2023-07-31 21:04:01 浏览: 31
以下是银行家算法的 C 语言代码,可以自己输入资源数和进程数,以及每个进程需要的资源数和当前已经分配的资源数,来进行安全性检查:
```c
#include<stdio.h>
#include<conio.h>
int main()
{
int p, r, i, j, k;
printf("Enter no of processes: ");
scanf("%d", &p);
printf("Enter no of resources: ");
scanf("%d", &r);
int alloc[p][r], max[p][r], need[p][r], avail[r], safe_seq[p], finish[p];
// Reading allocation matrix
printf("Enter allocation matrix:\n");
for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
scanf("%d", &alloc[i][j]);
}
}
// Reading maximum matrix
printf("Enter maximum matrix:\n");
for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
scanf("%d", &max[i][j]);
}
}
// Calculating need matrix
for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
need[i][j] = max[i][j] - alloc[i][j];
}
}
// Reading available resources
printf("Enter available resources:\n");
for(i=0;i<r;i++)
{
scanf("%d", &avail[i]);
}
// Initializing finish array
for(i=0;i<p;i++)
{
finish[i] = 0;
}
// Calculating safe sequence
int count = 0;
while(count < p)
{
for(i=0;i<p;i++)
{
if(finish[i] == 0)
{
int flag = 1;
for(j=0;j<r;j++)
{
if(need[i][j] > avail[j])
{
flag = 0;
break;
}
}
if(flag == 1)
{
safe_seq[count] = i;
finish[i] = 1;
count++;
for(k=0;k<r;k++)
{
avail[k] = avail[k] + alloc[i][k];
}
}
}
}
}
// Printing safe sequence
printf("\nSafe sequence: ");
for(i=0;i<p;i++)
{
printf("%d ", safe_seq[i]);
}
return 0;
}
```
注意:该算法的前提条件是系统必须是可用的,即在任何时刻都至少有一个进程能够申请到足够的资源。如果系统已经处于不安全状态,那么该算法将无法保证找到安全序列。
阅读全文