• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: C/C++
  • 标签:

资源简介

c++写的死锁检测与解除算法,亲测已经运行成功,代码有说明,容易理解

资源截图

代码片段和文件信息

#include
#include
#include
#define M 5
#define N 3

int MAX[M][N]={{753}{322}{902}{222}{433}};
int ALLOCATION[M][N]={{010}{200}{302}{211}{002}};
int NEED[M][N]={{743}{122}{600}{011}{431}};
int AVAILABLE[N]={332};
int Request[N]={000}; 
int temp[5]={00000};
bool finish[5];

void showdata(){
  int ij; 
printf(“系统可用的资源数为:\n“); 
printf(“ “); 
for (j=0;jprintf(“ 资源%d:%d“jAVAILABLE[j]); 
 } 
printf(“\n“); 
printf(“各进程还需要的资源量:\n“); 
for (i=0;i
printf(“ 进程%d:“i); 
for (j=0;jprintf(“资源%d:%d“jNEED[i][j]); 

printf(“\n“); 

printf(“各进程已分配到的资源量:\n“); 
for(i=0;i   printf(“ 进程%d:“i); 
   for (j=0;j      printf(“资源%d:%d“jALLOCATION[i][j]); 
   } 
printf(“\n“); 

}

bool test(){
int i=0j=0lk=0;
for(i=0;i for(l=0;l<=M;l++){
for(i=0;i if(finish[i]==false){
  for(j=0;(j  // printf(“\n进程%i%d\n“ij);
  if(j==N){
     finish[i]=true;
             for(j=0;j    AVAILABLE[j]=AVAILABLE[j]+ALLOCATION[i][j];
 temp[k]=i;
 k=k+1;
// printf(“\nk=%d\n“k);
 if(i==4)i=-1;
  }
}
}
if(i==5)i=-1;
}
if(k==M){
  printf(“存在安全序列:“);
  for(i=0;i     printf(“进程%d->“temp[i]);
  printf(“\n“);
  return  true;
}
else{
printf(“进程“);
    for(i=0;i    if(finish[i]==false)
   printf(“%d“i);
}
    printf(“发生死锁!\n“);
printf(“不存在安全序列!\n“);
    return false;
}

}

int input(){
int i=-1j=1;
while(i<0||i>4){
        printf(“请输入需申请资源的进程号(从0到4否则重输入!):“);
        scanf(“%d“&i); 
        if(i<0||i>=M)printf(“输入的进程号不存在,重新输入!\n“); 
}
printf(“请输入进程“); 
    printf(“%d“i); 
    printf(“申请的资源数\n“); 
for(j=0;j printf(“资源%d:“j);
scanf(“%d“&Request[j]);
if(Request[j]>NEED[i][j]){
   printf(“进程%d申请的资源数大于进程%d还需要%d“iij); 
           printf(“类资源的资源量!申请不合理,出错!\n“); 
   return -1;
}
else { 
            if(Request[j]>AVAILABLE[j]) { 
                printf(“进程%d申请的资源数大于系统可用%d“ij); 
                printf(“类资源的资源量!申请不合理,出错!\n“); 
                return -1; 

}
}
for(j=0;j    AVAILABLE[j]=AVAILABLE[j]-Request[j];
       ALLOCATION[i][j]= ALLOCATION[i][j]+Request[j];
       NEED[i][j]= NEED[i][j]-Request[j];
}
}
void safe(){
  int i=0j=0;
  bool s=test();
  while(i  printf(“回收进程%d已分配的资源.\n“i);
     for(j=0;j        {
 AVAILABLE[j]+=ALLOCATION[i][j];  //回收
         NEED[i][j]=NEED[i][j]+ALLOCATION[i][j];
 ALLOCATION[i][j]=0;
}
 if(test())
printf(“死锁已解除!\n“);
else
i++;
//test();
  }
}

void main(){
  showdata();
  input();
  safe();
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3055  2018-04-26 11:05  bank.cpp

----------- ---------  ---------- -----  ----

                 3055                    1


评论

共有 条评论