#define M 50
int max[M][M], allocation[M][M],need[M][M],available[M]; /*定义全局变量*/
int i, j, n, m, r;
main()
{ void check();
void print();
int p,q;
int req[M], allocation1[M][M],need1[M][M],available1[M];
printf(“Please input the processes sum:”);
scanf(“%d”, &n); /*输入进程总数*/
printf(“Please input the kinds sum :”);
scanf(“%d”, &m); /*输入资源种类总数*/
printf(“please input the max resources :”);
for(i=0;i<n; i++)
for(j=0;j<m; j++)
{scanf(“%2d”,&max[i][j]); } /*输入最大矩阵*/
printf(“please input the allocation resources :”);
for(i=0;i<n; i++)
for(j=0;j<m; j++)
scanf(“%d”, &allocation[i][j]); /*输入已分配资源数*/
printf(“please input the need resources :”);
for (i=0;i<n; i++)
for(j=0;j<m; j++)
{ need[i][j]=max[i][j]-allocation[i][j];
printf(“%2d”,need[i][j]);
} /*输出还需要的资源数*/
printf(“\nplease input the available number :”);
for (i=0;i<m; i++)
scanf(“%d”, &available[i]); /*输入可用资源数*/
check(); /*检测已知的状态是否安全*/
if (r==1) /*如果已知的状态安全则执行以下代码*/
{
do { p=0,q=0;
printf(“\nplease input the NO. of process: ”);
scanf(“%d”, &i); /*输入请求资源的进程号*/
printf(“please input the resources of request:”);
for(j=0;j<m; j++)
scanf(“%d”,&req[j]); /*输入该进程所需的资源数 */
for(j=0;j<m; j++)
if(req[j]>need[i][j])
p=1; /*判断请求是否超过最大资源数*/
if(p)
printf(“The resources of request have been beyond the max number needed!”);
else
{
for(j=0;j<m; j++)
if(req[j]>available[j])
q=1; /*判断请求是否超过可用资源数 */
if(q)
printf(“There are not enough available resources!”);
else
{
for(j=0;j<m; j++) /*请求满足条件 */
{ available1[j]=available[j]; /* 保存原已分配的资源数,需要的资源数,和可用的资源数*/
allocation1[i][j]=allocation[i][j];
need1[i][j]=need[i][j];
available[j]=available[j]-req[j]; /* 系统尝试把资源分配给请求的进程 */
allocation[i][j]=allocation[i][j]+req[j];
need[i][j]=need[i][j]-req[j];
}
print(); /*输出可用资源数*/
check(); /*进行安全检测*/
if(r==0) /*分配后状态不安全*/
{for (j=0;j<m; j++)
{ available[j]=available1[j]; /* 还原分配前的已分配的资 源数,仍需要的资源数和可用的资源数 */
allocation[i][j]=allocation1[i][j];
need[i][j]=need1[i][j];
}
printf(“ This is unsafe and return:\n”);
print();
}
}
}
printf(“\nDo you want to continue y or n \n”); /*判断是否继续进行资源分配*/
} while (getch()=='y‘);
}
}