/*coding by Ljs from csu
2007.11.10*/
#include<stdio.h>
#define N 4
#define M 5
main()
{
int maxc[M][N]={3,2,1,4,0,2,5,2,5,1,0,5,1,5,3,0,3,0,3,3};
int availc[M][N]={2,0,1,1,0,1,2,1,4,0,0,3,0,2,1,0,1,0,3,0};
int c[N]={8,5,9,7};
int avail[N]={0};
int i=0,j=0,k[M]={-1,-1,-1,-1,-1},kk=0;
int flag=0;
int flag2=0;
/*The max need table*/
printf("/n/t The max need table");
printf("/n process ");
for(i=0;i<N;i++)
{printf("/tR[%d]",i);
}
for(i=0;i<M;i++)
{printf("/n p[%d]",i);
for(j=0;j<N;j++)
{printf("/t%d",maxc[i][j]);
}
}
/*the rest resource*/
for(j=0;j<N;j++)
{
for(i=0;i<M;i++)
{avail[j]+=availc[i][j];}
avail[j]=c[j]-avail[j];
}
/*The alloc table*/
printf("/n/n/t The allocation table");
printf("/n process ");
for(i=0;i<N;i++)
{printf("/tR[%d]",i);
}
for(i=0;i<M;i++)
{printf("/n p[%d]",i);
for(j=0;j<N;j++)
{printf("/t%d",availc[i][j]);
}
}
/*the avail table*/
printf("/n/n avail");
for(j=0;j<N;j++)
{printf("/t%d",avail[j]);}
i=0,j=0;
while(i<M)
{
for(j=0;j<M;j++)
{if(k[j]==i)
{flag=1;i++;break;}
}
if(flag==1)
{flag=0;continue;}
for(j=0;j<N;j++)
{if(avail[j]<maxc[i][j]-availc[i][j])
{flag2=1;i++;j=0;break;}
}
if(flag2==1)
{flag2=0;continue;}
k[kk]=i;
for(j=0;j<N;j++)
{avail[j]+=availc[k[kk]][j];}
/*the avail table*/
printf("/n after p[%d]",i);
for(j=0;j<N;j++)
{printf("/t%d",avail[j]);}
if(kk==M-1)
{printf("/nThis is safe!/n");
for(j=0;j<M-1;j++)
{printf("Process[%d]-->",k[j]);}
printf("Process[%d]/n",k[M-1]);
break;
}
kk++;
i=0;
}
if(i==M)
printf("/nthis is no safe alloc!");
getch();
}
进程等的数据预先存入数组