死锁的检测与解除C语言代码

上传人:壹****1 文档编号:459167840 上传时间:2022-10-21 格式:DOC 页数:10 大小:125.50KB
返回 下载 相关 举报
死锁的检测与解除C语言代码_第1页
第1页 / 共10页
死锁的检测与解除C语言代码_第2页
第2页 / 共10页
死锁的检测与解除C语言代码_第3页
第3页 / 共10页
死锁的检测与解除C语言代码_第4页
第4页 / 共10页
死锁的检测与解除C语言代码_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《死锁的检测与解除C语言代码》由会员分享,可在线阅读,更多相关《死锁的检测与解除C语言代码(10页珍藏版)》请在金锄头文库上搜索。

1、实验名称: 姓 名: 学 号: 专业班级: 指导老师:死锁的检测与解除杨秀龙1107300432创新实验班111实验题目死锁的检测与解除实验目的为了更清楚系统对死锁是如何检测和当死锁发生时如何解除死锁设计思想首先需要建立和银行家算法类似的数组结构, 先把孤立的进程 (没有占用资源的 进程)放入一个数组中,根据死锁原理,找出既不阻塞又非独立的进程结点,使 之成为孤立的结点并放入孤立数组中, 再释放该进程的占用资源, 继续寻找下一 个孤立结点, 如果所有进程都能放入孤立数组中, 则系统不会发生死锁, 如果有 进程不能放入,则系统将发生死锁,并进行死锁解除,撤消所有的死锁进程,释 放它们占用的资源。

2、主要数据结构和银行家算法类似,需要建立相应的数组int allocationMM;int requestMM;int availableM;int lineM; / 管理不占用资源的进程int noM; / 记录造成死锁的进程int workM ;流程图输入资源数输入 Allocation矩阵输入 Request矩阵输入 available矩阵运行结果图(1)不会发生死锁时图(1)当发生死锁时附录源代码如下:# include stdio.h# define M 50int allocationMM;int requestMM;int availableM;int lineM;int noM;

3、 int n,m,i,j,f,a=0; main() void check(); void remove();void show();printf( 输入进程总数 :); scanf(%d, &n);printf(输入资源种类数量 :);scanf(%d, &m);Allocation:n);request:n);available:n);printf(输入进程已占用的资源for(i=0;in;i+)for(j=0;jm;j+) scanf(%d, &allocationij);printf( 输入进程的请求矩阵 for(i=0;in;i+) for(j=0;jm;j+) scanf(%d,&

4、requestij);printf( 输入系统可利用资源 for (j=0;jm;j+)scanf(%d, &availablej); show();check(); f=1;for(i=0;in;i+) if(linei=0) f=0;noa+=i;/ 记录死锁序号 if(f=0)n););printf( 该系统将发生死锁! printf( 造成死锁的进程为: for(i=0;in;i+)printf(%2d,noi);printf(n);remove();show();elseprintf( 不会发生死锁! n);void check()/ 死锁检测 int k,;int x;int wo

5、rkM; for(i=0;in;i+) linei=0; for(i=0;in;i+) /(2) x=0; for(j=0;jm;j+) if(allocationij=0) x+;if(x=m) linei=1; for(j=0;jm;j+)/(3) workj=availablej; k=n;dofor (i=0;in; i+) if(linei=0)f=1; /空置条件是否满足for (j=0;jworkj)f=0;if (f=1) / 找到满足条件的进程 linei=1;释放资源for (j=0;j0);void remove() / 死锁解除for(i=0;in;i+)if(line

6、i=0)for(j=0;jm;j+)availablej+=allocationij;allocationij=0;requestij=0;printf( 死锁解除! n);void show()printf( 进程 ); printf( ); printf(allocation); printf( ); printf(request); printf( ); printf(available); printf(n);for (i=0;in; i+)printf(%2d,i);printf( ); for(j=0;jm; j+) printf(%2d,allocationij);printf( ); for(j=0;jm; j+) printf(%2d,requestij);printf( );for(j=0;j0) break;printf(%2d,availablej);printf(n);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号