下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.模拟死锁检测算法1 输入:“资源分配表”文件,每一行包含资源编号、进程编号两项(均用整数表示,并用空格分隔开),记录资源分配给了哪个进程。“进程等待表”文件,每一行包含进程编号、资源编号两项(均用整数表示,并用空格分隔开),记录进程正在等待哪个资源。下面是一个示例:资源分配表:1 12 23 3进程等待表:1 22 33 12 处理要求:程序运行时,首先提示“请输入资源分配表文件的文件名:”;再提示“请输入进程等待表文件的文件名:”。输入两个文件名后,程序将读入两个文件中的有关数据,并按照死锁检测算法进行检测。3 输出要求:第一行输出检测结果:有死锁 或 无死锁。第二行输出进程循环等待队列,
2、即进程编号(如果有死锁)。4 文件名约定提交的源程序名字:resourceXXX.c或者resourceXXX.cpp(依据所用语言确定)输入文件名字:可由用户指定结果输出到resultXXX.txt中其中:XXX为账号。5 死锁检测算法:当任一进程Pj申请一个已被其他进程占用的资源ri时,进行死锁检测。检测算法通过反复查找进程等待表和资源分配表,来确定进程Pj对资源ri的请求是否导致形成环路,若是,便确定出现死锁。6 测试说明:测试教师将事先准备好一组文件(格式为*.txt),从中为每个程序随机指定一至三个作为输入文件(被测试者需从键盘输入指定文件的文件名),并查看程序输出结果。 本程序包括
3、:死锁检测算法 VC+调试通过 (C)copyright by Neo 欢迎大家测试 请问题请Email:*/ #include#include#include const int MAXQUEUE=100;/定义表的最大行数 typedef struct nodeint resource;int process;cell; cell occupyMAXQUEUE;int occupy_quantity;cell waitMAXQUEUE;int wait_quantity; /初始化函数void initial()int i; for(i=0;iMAXQUEUE;i+)
4、cess=-1;occupyi.resource=-1; cess=-1;waiti.resource=-1;occupy_quantity=0;wait_quantity=0; /读数据文件int readData()FILE *fp;char fname20;int i; cout请输入资源分配表文件的文件名:fname;if(fp=fopen(fname,r)=NULL)cout错误,文件打不开,请检查文件名:)endl;return 0;elsewhile(!feof(fp) fscanf(fp,%d %d,&occupyoccupy_quantity.resourc
5、e,&occupyoccupy_cess); occupy_quantity+; cout请输入进程等待表文件的文件名:fname;if(fp=fopen(fname,r)=NULL)cout错误,文件打不开,请检查文件名:)endl;return 0;elsewhile(!feof(fp) fscanf(fp,%d %d,&waitwait_cess,&waitwait_quantity.resource); wait_quantity+; /输出所读入的数据coutendlendl输出所读入的数据endl;coutendl;cout资源分配表
6、endl;cout资源编号进程编号endl;for(i=0;ioccupy_quantity;i+)coutoccupyi.resource cessendl;coutendl;cout进程等待表endl;cout进程编号资源编号endl;for(i=0;iwait_quantity;i+)coutwaiti.resource cessendl;return 1; /检测void check()int tableMAXQUEUEMAXQUEUE;int table1MAXQUEUEMAXQUEUE; int i,j,k;int flag,t,p;int
7、max_process; /初始化表格 for(i=0;iMAXQUEUE;i+)for(j=0;jMAXQUEUE;j+) tableij=0; table1ij=0; /先找到进程最大编号max_process=-1;for(i=0;imax_process) max_process=cess;for(i=0;imax_process) max_process=cess; for(i=0;iwait_quantity;i+)for(j=0;joccupy_quantity;j+) if(waiti.resource=occupyj.resource)
8、cess=1;cess=1; cout初始等待占用表:endl;for(i=0;imax_process+1;i+)for(j=0;jmax_process+1;j+) couttableij;coutendl; coutendl; for(i=0;imax_process+1;i+)for(j=0;jmax_process+1;j+) for(k=0;kmax_process+1;k+)tableij=tableij|(tableik&tablekj); cout检测后的等待
9、占用表:endl; for(i=0;imax_process+1;i+)for(j=0;jmax_process+1;j+) couttableij;coutendl; flag=-1;for(i=0;imax_process+1;i+)if(tableii=1) flag=i; break;coutendlendl检测结果endl;coutendl;if(flag!=-1)cout存在死锁endl;cout进程循环等待队列:; p=flag; /存在进程循环等待队列的那一进程/进程循环等待队列中的所有进程是table表中的这一行是1的进程,只是顺序要再确定t=1;while(t) coutp; for(j=0;jmax_process+1;j+)if(table1pj=1) if(tablejflag=1)p=j;break; if(p=flag)t=0;coutflagendl;elsecout不存在死锁endl;/显示版权信息函数void version()coutendlendl; cout endl;cout 死 锁 检 测 算 法 endl;cout endl;cout (c)All Right ReservedN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 口岸传染病快速检测技术科普课件
- 草原兽医人畜共患病职业防护课件
- 2025年广东专升本理科考试题库(含答案)
- 2026本溪高级中学高一入学英语分班考试真题含答案
- 2026年安徽省马鞍山市高一数学分班考试真题含答案
- 2025年专升本物理真题及答案
- 2026高考政治时事政治考试试卷及答案
- (2026)执业药师真题试卷及答案
- (2026)执业药师继续教育试题及答案
- 冬至吃羊肉为什么上火课件
- 生产运作管理 第7版 课件 第十一章 制造业的作业计划与控制
- 2026气凝胶绝热材料在储能系统中的应用价值评估报告
- 2026新教材语文 7 培养德智体美劳全面发展的社会主义建设者和接班人 教学课件
- 高考英语阅读理解:六大类型题目-解题方法
- 2026年湖南高速铁路职业技术学院高职单招笔试职业技能测验试题库含答案解析3套试卷
- 2026年中国电信校园招聘考试笔试试题及答案
- 重庆市第九人民医院招聘笔试真题2025
- 化工原理课件第二章总结
- 2026年中级经济师《知识产权实务》考试历年机考真题集附参考答案详解(完整版)
- 2026年专升本化学全真模拟试卷
- 白银公司历年招聘试题汇 总笔试试题
评论
0/150
提交评论