?? tt.txt
字號(hào):
#include<stdio.h>
#include<stdlib.h>
#define MAX_SRC 5 /*最大資源種類數(shù)*/
#define MAX_PROC 10 /*最大進(jìn)程數(shù)*/
struct available /*定義一個(gè)系統(tǒng)可用資源的結(jié)構(gòu)體*/
{
int avail[3];
}available1;
struct processor /*定義一個(gè)進(jìn)程的結(jié)構(gòu)體*/
{
int allocation[MAX_SRC]; /*已經(jīng)分配的*/
int need[MAX_SRC]; /*還需要的資源*/
int request[MAX_SRC]; /*請(qǐng)求的資源*/
int max[MAX_SRC]; /*最大需要的資源*/
int finish; /*是否完成的標(biāo)志位*/
}proc[MAX_PROC];
/*輸入的進(jìn)程信息*/
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("請(qǐng)輸入p[%d]進(jìn)程已分配的資源:\n",i);
for(j=0;j<n_src;j++)
{scanf("%d",&proc[i].allocation[j]);}
printf("請(qǐng)輸入p[%d]進(jìn)程還需要的資源:\n",i);
for(j=0;j<n_src;j++)
{scanf("%d",&proc[i].need[j]);}
}
printf("請(qǐng)輸入系統(tǒng)現(xiàn)在有的資源:\n");
for(j=0;j<n_src;j++)
scanf("%d",&available1.avail[j]);
}
/**/
void try_pro();
/*進(jìn)程試探,看是否滿足,如果能做完,則該進(jìn)程的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++) /*可用的資源與需要的進(jìn)行比較,可以分配則將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("請(qǐng)輸入進(jìn)程的數(shù)目:");
scanf("%d",&n_proc);
printf("請(qǐng)輸入進(jìn)程資源的種類:");
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);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -