📄 yhjsf.txt
字号:
#include <stdio.h>
#define m 5
#define n 3
int Available[n]={2,3,3},
Alloc[m][n]={{2,1,2},{4,0,2},{3,0,5},{2,0,4},{3,1,4}},
Need[m][n]={{3,4,7},{1,3,4},{0,0,3},{2,2,1},{1,1,0}};
int safe()
{
int Finish[m]={0},work[n],i=0,j,k;
for(j=0;j<n;j++)
work[j]=Available[j];
while(1)
{
k=1;
for(j=0;j<n;j++)
if(Need[i][j]>work[j]) k=0;
if(Finish[i]==0 && k==1)
{
Finish[i]=1;
printf("P%d ",i);
for(j=0;j<n;j++)
work[j]=work[j]+Alloc[i][j];
i=0;
continue;
}
i++;
if(i==m) break;
}
for(i=0;i<m;i++)
{
if(Finish[i]==0)
return 0;
}
return 1;
}
main()
{
int Request[n],i,j,k;
while(1)
{
scanf("%d",&i);
if(i==0) break;
i--;
k=0;
for(j=0;j<n;j++)
{
scanf("%d",&Request[j]);
if (!(Request[j]<=Need[i][j]))
{
printf("非法请求!\n");
k=1;
continue;
}
if (!(Request[j]<=Available[j]))
{
printf("P%d阻塞!\n",i+1);
k=1;
continue;
}
}
if(k==1) continue;
for(j=0;j<n;j++)
{
Available[j]=Available[j]-Request[j];
Alloc[i][j]=Alloc[i][j]+Request[j];
Need[i][j]=Need[i][j]-Request[j];
}
if(safe()==1) printf("\n已分配资源给P%d。\n",i+1);
else
{
printf("新状态不安全,取消试探性分配。\n");
for(j=0;j<n;j++)
{
Available[j]=Available[j]+Request[j];
Alloc[i][j]=Alloc[i][j]-Request[j];
Need[i][j]=Need[i][j]+Request[j];
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -