(环境:VMware软件下的Ubuntu虚拟机)(使用c语言,代码重点部分请添加注释)
(基于“银行家”算法,设计一个死锁避免系统)
当safe函数是int型时,不能返回0和1用来作主函数和其他函数的判断吗?可是如果safe是bool型,我没办法借助SS[s]输出安全序列。可以怎么改呢?
```
安全性检测算法部分源码:
```int safe() {
int work[RNUM];
bool p[PNUM];
int i=0,j=0;
int s;
int ss[5]={0};
for(i=0;i<PNUM;i++)
p[i]=false;
for(j=0; j<RNUM; j++)
work[j]=available[j];
///////is safe state?
int num= PNUM,flag=0;
while ( num-- && flag!=PNUM ){
for (i=0;i<PNUM;i++){
if ( p[i]==true ) {
continue;
}
for ( j=0;j<RNUM;j++){
if ( need[id][j]>work[j] ) break;
}
if ( j==RNUM ) {
flag++;
for ( j=0;j<RNUM;j++){
work[j]+=allocation[i][j];
}
p[i]=true;
ss[s++]=i;
}
}
}
if ( flag==PNUM )
{for(s=0;s<5;s++)
printf("存在一个安全序列:");
printf("%d,",ss[s]);
return 1;}
else
{return 0;}
}
```c
```主函数
int main() {
pid_t pid0,pid1,pid2,pid3,pid4;
while((pid0=vfork())==-1);
if(pid0==0) { //p0 allocation
printf("P0 is allocated<0,0,0>\n");
allocation[0][0]=0;
allocation[0][1]=0;
allocation[0][2]=0;
for(int i=0; i<RNUM; i++) {
need[0][i]=max[0][i]-allocation[0][i];
available[i]-=allocation[0][i];
}
exit(0);
} else { //main process
while((pid1=vfork())==-1);
if(pid1==0) { //p1 allocation
printf("P1 is allocated<0,0,0>\n");
allocation[1][0]=0;
allocation[1][1]=0;
allocation[1][2]=0;
for(int i=0; i<RNUM; i++) {
need[1][i]=max[1][i]-allocation[1][i];
available[i]-=allocation[1][i];
}
exit(0);
} else { //main process
while((pid2=vfork())==-1);
if(pid2==0) { //p2 allocation
printf("P2 is allocated<0,0,0>\n");
allocation[2][0]=0;
allocation[2][1]=0;
allocation[2][2]=0;
for(int i=0; i<RNUM; i++) {
need[2][i]=max[2][i]-allocation[2][i];
available[i]-=allocation[2][i];
}
exit(0);
} else { //main process
while((pid3=vfork())==-1);
if(pid3==0) { //p3 allocation
printf("P3 is allocated<0,0,0>\n");
allocation[3][0]=0;
allocation[3][1]=0;
allocation[3][2]=0;
for(int i=0; i<RNUM; i++) {
need[3][i]=max[3][i]-allocation[3][i];
available[i]-=allocation[3][i];
}
exit(0);
} else { //main process
while((pid4=vfork())==-1);
if(pid4==0) { //p3 allocation
printf("P4 is allocated<0,0,0>\n");
allocation[4][0]=0;
allocation[4][1]=0;
allocation[4][2]=0;
for(int i=0; i<RNUM; i++) {
need[4][i]=max[4][i]-allocation[4][i];
available[i]-=allocation[4][i];
}
exit(0);
} else
{display();
if(safe()==1) printf("The system is safe now!\n");
else printf("The system is not safe\n");}
//////test banker()
banker();
exit(0);
}
}
}
}
return EXIT_SUCCESS;;}
