logo资料库

死锁的检测与接触 C语言.docx

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
实验题目
实验目的
设计思想
主要数据结构
流程图
运行结果
附录
源代码如下:
实验名称: 死锁的检测与解除 姓 名: 杨秀龙 1107300432 学 号: 专业班级: 创新实验班 111 指导老师: 霍林
实验题目 死锁的检测与解除 实验目的 为了更清楚系统对死锁是如何检测和当死锁发生时如何解除死锁 设计思想 首先需要建立和银行家算法类似的数组结构,先把孤立的进程(没有占用资源的 进程)放入一个数组中,根据死锁原理,找出既不阻塞又非独立的进程结点,使 之成为孤立的结点并放入孤立数组中,再释放该进程的占用资源,继续寻找下一 个孤立结点,如果所有进程都能放入孤立数组中,则系统不会发生死锁,如果有 进程不能放入,则系统将发生死锁,并进行死锁解除,撤消所有的死锁进程,释 放它们占用的资源。 主要数据结构 和银行家算法类似,需要建立相应的数组 int allocation[M][M]; int request[M][M]; int available[M]; int line[M]; int no[M]; int work[M]; //管理不占用资源的进程 //记录造成死锁的进程
流程图 开始 输入总进程 数 输入资源数 输入 Allocation 矩阵 输入 Request 矩阵 输入 available 矩阵 是否发生死 锁 是 否 死锁解除 结束
运行结果 图(1)不会发生死锁时 图(1)当发生死锁时
附录 源代码如下: # include "stdio.h" # define M 50 int allocation[M][M]; int request[M][M]; int available[M]; int line[M]; int no[M]; int n,m,i,j,f,a=0; main() { void check(); void remove(); void show(); printf("输入进程总数:"); scanf("%d", &n); printf("输入资源种类数量:"); scanf("%d", &m); printf("输入进程已占用的资源 Allocation:\n"); for(i=0;i
if(f==0) { printf("该系统将发生死锁!\n"); printf("造成死锁的进程为:"); for(i=0;i
for (j=0;jwork[j]) f=0; if (f==1) //找到满足条件的进程 line[i]=1; for (j=0;j0); } void remove() //死锁解除 { for(i=0;i
for (i=0;i0) break; printf("%2d",available[j]); } printf("\n"); } }
分享到:
收藏