ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:148.45KB ,
资源ID:8182822      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8182822.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(哲学家就餐问题实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

哲学家就餐问题实验报告.docx

1、哲学家就餐问题实验报告 哲学家就餐问题实验报告 姓名: 何绍金 班级:自动化1202 学号:201203870408 指导教师: 张健 2014年11月22日 一实验题目 经典的同步问题哲学家就餐问题设计。二实验内容 1.实验要求 有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃通心粉.为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。 2.程序流程图图1.主程序模块流程图图2.状态改变模块流程图图3.返回哲学家状态流程图图4返回餐具状态模块流程图3.测试结果图5 测试结果1

2、图6 测试结果2图7 测试结果34.结果分析和小结(1)程序分为四大模块,一步步解决了哲学家状态及状态改变的问题,筷子的“闲”、“用”问题;实现了哲学家等待、吃饭、思考三个过程的转换循环,并且避免了死锁问题;让临界资源得到了充分的利用。(2)这次实验让我学会分模块解决问题,怎样运用互斥锁对临界资源进行管理;此外自己在编程上及一些函数的认识仍存在较大的问题,以后应该多多实践,提高自己的反应速度,加强逻辑思维能力。三程序源代码#include #include #include #include #include using namespace std;bool tools5; /全局变量,用餐工

3、具CRITICAL_SECTION cs; /信号量, 在线程中使用,临界区class Philosopherprivate:int number;int status; /*标记当前哲学家的状态,0表示正在等待(即处于饥饿状态),1表示得到两支筷子正在吃饭,2表示正在思考*/public:Philosopher(int num=0): status(2), number(num) const int find()return number;const int getinfo() return status; void Change() ; /状态改变函数void dead_lock();/v

4、oid Philosopher:dead_lock()EnterCriticalSection (&cs) ; /进入临界区string s;if(status=1)toolsnumber%5=true;/ tools(number-1)%5=true;status=2;else if(status=2)status=0;/tools(number-1)%5=false;/tools(number-1)%5=true;else if(status=0)toolsnumber%5=false;tools(number-1)%5=false;status=1;LeaveCriticalSectio

5、n (&cs) ;/ coutChange();int i=pA-getinfo();string str;if(i=0)str=等待;else if(i=1)str=就餐;else str=思考;return str;string toolstatus(bool a)string state;if(a=true)state=闲;if(a=false)state=用;return state;int main()char con=y; /判断是否继续/ con = n;for(int i=0;i5;i+)toolsi=true; /筷子都未使用,初始化Philosopher P1(1),P2(

6、2),P3(3),P4(4),P5(5);InitializeCriticalSection (&cs) ; /初始化初始化临界区cout-状态说明示意图:-endl;cout 哲学家1号的状态 endl;cout 筷子0的状态 筷子1的状态endl;cout哲学家5号的状态 哲学家2号的状态endl;cout 筷子4的状态 筷子2的状态endl;cout 哲学家4号的状态 哲学家3号的状态endl;cout 筷子3的状态endl;/cout 哲学家3号的状态 endl;cout筷子的状态,用表示使用中,闲表示空闲中。endl;cout-endl;/cout哲学家们开始生活:endl;/cou

7、t当前状态:;coutcon;while(con=y)P1.Change(); P2.Change(); P3.Change(); P4.Change(); P5.Change();cout当前状态为:endl;cout P1.find()print(&P1) endl;cout toolstatus(tools0) toolstatus(tools1)endl;cout P5.find()print(&P5) P2.find()print(&P2)endl;cout toolstatus(tools4) toolstatus(tools2)endl;cout P4.find()print(&

8、P4) P3.find()print(&P3)endl;cout toolstatus(tools3)endl;cout-endl;coutcon;Sleep(20);while(con=n)P1.dead_lock();P2.dead_lock(); P3.dead_lock(); P4.dead_lock(); P5.dead_lock();cout死锁情况endl;cout P1.find()print(&P1) endl;cout toolstatus(tools0) toolstatus(tools1)endl;cout P5.find()print(&P5) P2.find()print(&P2)endl;cout toolstatus(tools4) toolstatus(tools2)endl;cout P4.find()print(&P4) P3.find()print(&P3)endl;cout toolstatus(tools3)endl;cout-endl;coutcon;Sleep(20);DeleteCriticalSection (&cs) ; /退出资源区return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1