哲学家就餐问题实验报告_第1页
哲学家就餐问题实验报告_第2页
哲学家就餐问题实验报告_第3页
哲学家就餐问题实验报告_第4页
哲学家就餐问题实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

哲学家就餐问题实验报告班级:自动化1202指导教师:张健2014年11月22日一.实验题目经典的同步问题——哲学家就餐问题设计。二.实验内容1.实验要求有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃通心粉.为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。2.程序流程图3.测试结果图6测试结果2图7测试结果34.结果分析和小结(1)程序分为四大模块,一步步解决了哲学家状态及状态改变的问题,筷子的“闲”、“用”问题;实现了哲学家等待、吃饭、思考三个过程的转换循环,并且避免了死锁问题;让临界资源得到了充分的利用。(2)这次实验让我学会分模块解决问题,怎样运用互斥锁对临界资源进行管理;此外自己在编程上及一些函数的认识仍存在较大的问题,以后应该多多实践,提高自己的反应速度,加强逻辑思维能力。三.程序源代码#include<windows.h>#include<string>#include<iostream>#include<assert.h>usingnamespacestd;booltools[5];//全局变量,用餐工具CRITICAL_SECTIONcs;//信号量,在线程中使用,临界区classPhilosopher。private:intnumber;intstatus;/*标记当前哲学家的状态,0表示正在等待(即处于饥饿状态),1表示得到两支筷子正在吃饭,2表示正在思考*/public:Philosopher(intnum=0):status(2),number(num){}constintfind。。returnnumber;}constintgetinfo。{returnstatus;}voidChange(;//状态改变函数voiddead_lock(;};/////////voidPhilosopher::dead_lock。。EnterCriticalSection(&cs);//进入临界区strings;if(status==1)。tools[number%5]=true;//tools[(number-1)%5]=true;status=2;}elseif(status==2)。status=0;//tools[(number-1)%5]=false;//tools[(number-1)%5]=true;}elseif(status==0)。tools[number%5]=false;tools[(number-1)%5]=false;status=1;}LeaveCriticalSection(&cs);//cout<<"*********";}/////////voidPhilosopher::Change。。EnterCriticalSection(&cs);//进入临界区if(status==1)//正在进餐。tools[number%5]=true;//放下左手工具tools[(number-1)%5]=true;//放下右手工具status=2;//改变状态为思考}elseif(status==2)//思考中。status=0;//改变状态为等待}elseif(status==0)//等待中。if(tools[number%5]&&tools[(number-1)%5])//左右手两边工具均为空闲状态。tools[number%5]=false;//拿起左手工具tools[(number-1)%5]=false;//拿起右手工具status=1;}}LeaveCriticalSection(&cs);}stringprint(Philosopher*pA)。//pA->Change(;inti=pA->getinfo(;stringstr;if(i==0)str="等待";elseif(i==1)str="就餐";elsestr="思考";returnstr;}stringtoolstatus(boola)。stringstate;if(a==true)state="闲";if(a==false)state="用";returnstate;}intmain。。charcon='y';//判断是否继续//con='n';for(inti=0;i<5;i++)tools[i]=true;//筷子都未使用,初始化PhilosopherP1(1),P2(2),P3(3),P4(4),P5(5);InitializeCriticalSection(&cs);//初始化初始化临界区cou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论