血液rbc高了是什么意思:改程序——银行家算法C语言版

来源:百度文库 编辑:神马品牌网 时间:2024/05/09 04:30:42
小弟的程序不能做出正确的答案,可能逻辑上有一些问题,请大侠看一下,并进行修改!
#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("\t程序设计员:苏森\t\t时间:2005.11.30\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);
}

你是学软件的学生吗 ?
我是学软件的,我在操作系统里学了银行家算法,等我看了,在告诉你我的看法,好吗?
愿意的话希望交流一下 我的邮箱qingdaheqiang@163.com

查看输入的文字是否有误;