资源简介
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;j printf(“ 资源%d:%d“jAVAILABLE[j]);
}
printf(“\n“);
printf(“各进程还需要的资源量:\n“);
for (i=0;i {
printf(“ 进程%d:“i);
for (j=0;j printf(“资源%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
- 上一篇:编译原理三地址代码生成C++实现
- 下一篇:死锁检测源代码
相关资源
- 操作系统C语言实现银行家算法,键盘
- 操作系统课程设计银行家算法C语言
- 银行家算法C实现
- 操作系统设备管理模拟 银行家算法
- 银行家算法c++源代码
- 银行家算法编程--没有错误的
- 银行家算法 c++实现代码+报告
- c/c++实现银行家算法模拟
- 银行家算法实现
- 计算机操作系统实验报告,C语言实现
- 银行家算法模拟实现C++版
- 银行家算法c语言
- 银行家算法 MFC实现
- 银行家算法-----一个n个并发进程共享
- 银行家算法源程序包含C语言+C++两种代
- 操作系统银行家算法源码
- 银行家算法C语言实现源文件
- 银行家算法c++工程项目文件
- 用C语言实现银行家算法
- 输出所有安全序列的银行家c++算法
- 操作系统 银行家算法 C++
- 银行家算法课程设计报告(c语言版)
- 银行家算法的实现(c++代码)
- 银行家算法实验报告.docx
- 银行家算法Banker-s_Algorithm
- c++ 银行家算法
- 操作系统-银行家算法
- 银行家算法c语言代码
- 银行家算法实验报告C++版
- 银行家算法C语言实现
评论
共有 条评论