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

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

《死锁的检测与解除C语言代码.doc》由会员分享,可在线阅读,更多相关《死锁的检测与解除C语言代码.doc(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 li

3、neM;int noM; 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;i<n;i+)fo

4、r(j=0;j<m;j+) scanf("%d", &allocationij);printf(" 输入进程的请求矩阵 for(i=0;i<n;i+) for(j=0;j<m;j+) scanf("%d",&requestij);printf(" 输入系统可利用资源 for (j=0;j<m;j+)scanf("%d", &availablej); show();check(); f=1;for(i=0;i<n;i+) if(linei=0) f=0;noa+=

5、i;/ 记录死锁序号 if(f=0)n");");printf(" 该系统将发生死锁! printf(" 造成死锁的进程为: for(i=0;i<n;i+)printf("%2d",noi);printf("n");remove();show();elseprintf(" 不会发生死锁! n");void check()/ 死锁检测 int k,;int x;int workM; for(i=0;i<n;i+) linei=0; for(i=0;i<n;i+) /(2) x=0

6、; for(j=0;j<m;j+) if(allocationij=0) x+;if(x=m) linei=1; for(j=0;j<m;j+)/(3) workj=availablej; k=n;dofor (i=0;i<n; i+) if(linei=0)f=1; /空置条件是否满足for (j=0;j<m; j+)if (requestij>workj)f=0;if (f=1) / 找到满足条件的进程 linei=1;释放资源for (j=0;j<m; j+) workj=workj+allocationij; / availablej=workj;k

7、-;while(k>0);void remove() / 死锁解除for(i=0;i<n;i+)if(linei=0)for(j=0;j<m;j+)availablej+=allocationij;allocationij=0;requestij=0;printf(" 死锁解除! n");void show()printf(" 进程 "); printf(" "); printf("allocation"); printf(" "); printf("request&

8、quot;); printf(" "); printf("available"); printf("n");for (i=0;i<n; i+)printf("%2d",i);printf(" "); for(j=0;j<m; j+) printf("%2d",allocationij);printf(" "); for(j=0;j<m; j+) printf("%2d",requestij);printf(" ");for(j=0;j<m; j+) if(i>0) break;printf("%2d",availablej);printf("n");

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1