void check() /*检测函数 */
{ int k, f, v=0;
int work[M],a[M];
char finish[M];
r=1;
for(i=0;i<n; i++)
finish[i]='F'; /*初始化各进程均没得到足够资源并完成*/
for(j=0;j<m; j++)
work[j]=available[j]; /*用work[j]表示可提供进程继续运行的各类资源数 */
k=n;
do
{
for (i=0;i<n; i++)
{if (finish[i]=='F’)
{ f=1;
for (j=0;j<m; j++)
if (need[i][j]>work[j])
f=0;
if (f==1) /*找到还没完成的且需求数小于可提供进程继续运行的*/
{ finish[i]='T'; /*资源数的进程*/
a[v++]=i; /*记录安全序列 */
for (j=0;j<m; j++)
work[j]=work[j]+allocation[i][j]; /*释放该进程已分配的资源*/
}
}
}
k--;
}while(k>0);
f=1;
for (i=0;i<n; i++) /*判断是否所有的进程都完成*/
{
if (finish[i]=='F‘)
{
f=0;
break;
}
}
if (f==0) /*若有进程没完成,则为不安全状态*/
{
printf(“This is unsafe . \n”);
r=0;
}
else /* 否则为安全状态*/
{
printf(“This is safe .”);
printf(“ the safe number is:”);
for (i=0;i<n;i++)
printf (“%d ”,a[i]); /*输出安全序列*/
printf(“\n”);
for (i=0;i<n; i++)
{
printf(“%2d”,i);
printf(“ ”);
for(j=0;j<m; j++)
printf(“%2d”,allocation[i][j]);
printf(“ ”);
for(j=0;j<m; j++)
printf(“%2d”,need[i][j]);
printf(“\n”);
}
}
}
void print() /*输出函数*/
{
int process[M];
printf(“The available resources: \n”);
for(j=0;j<m; j++)
printf(“%2d ”,available[j]);
printf(“\n”);
}