📄 tt.txt
字号:
#include<stdio.h>
#include<stdlib.h>
#define MAX_SRC 5 /*最大资源种类数*/
#define MAX_PROC 10 /*最大进程数*/
struct available /*定义一个系统可用资源的结构体*/
{
int avail[3];
}available1;
struct processor /*定义一个进程的结构体*/
{
int allocation[MAX_SRC]; /*已经分配的*/
int need[MAX_SRC]; /*还需要的资源*/
int request[MAX_SRC]; /*请求的资源*/
int max[MAX_SRC]; /*最大需要的资源*/
int finish; /*是否完成的标志位*/
}proc[MAX_PROC];
/*输入的进程信息*/
void input(int n_proc,int n_src)
{
int i,j;
for(i=0;i<n_proc;i++)
proc[i].finish=0;
for(i=0;i<n_proc;i++)
{
printf("请输入p[%d]进程已分配的资源:\n",i);
for(j=0;j<n_src;j++)
{scanf("%d",&proc[i].allocation[j]);}
printf("请输入p[%d]进程还需要的资源:\n",i);
for(j=0;j<n_src;j++)
{scanf("%d",&proc[i].need[j]);}
}
printf("请输入系统现在有的资源:\n");
for(j=0;j<n_src;j++)
scanf("%d",&available1.avail[j]);
}
/**/
void try_pro();
/*进程试探,看是否满足,如果能做完,则该进程的finish置1*/
void do_pro(int n_proc,int n_src)
{
int i,j,p=0,x=0;
for(i=0;i<n_proc;i++)
{
if(proc[i].finish==0)
{
for(j=0;j<n_src;j++) /*可用的资源与需要的进行比较,可以分配则将finish置1,*/
{
if(proc[i].need[j]<=available1.avail[j])
x++;
}
if(x==n_src)
{
for(j=0;j<n_src;j++) /*收回资源,将finish置1,*/
available1.avail[j]+=proc[i].allocation[j];
proc[i].finish=1;
}
}
else
continue;
}
}
/*输入安全序列*/
void out_put(int n_proc)
{
int i;
for(i=0;i<n_proc;i++)
{
if(proc[i].finish==1)
printf("p[%d]",i);
else
{
printf("无安全序列!");
break;
}
}
}
main()
{
int i,n_proc,n_src;
printf("\t\t\t银行家算法\n");
printf("请输入进程的数目:");
scanf("%d",&n_proc);
printf("请输入进程资源的种类:");
scanf("%d",&n_src);
input(n_proc,n_src);
for(i=0;i<n_proc;i++)
{do_pro(n_proc,n_src);}
out_put(n_proc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -