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

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

ID:58665537

大小:68.50 KB

页数:5页

时间:2020-10-15

哲学家就餐问题实验报告.doc_第1页
哲学家就餐问题实验报告.doc_第2页
哲学家就餐问题实验报告.doc_第3页
哲学家就餐问题实验报告.doc_第4页
哲学家就餐问题实验报告.doc_第5页
资源描述:

《哲学家就餐问题实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、南昌大学实验报告学生姓名:倪焕学号:专业班级:软件工程141班实验类型:■验证□综合□设计□创新实验日期:2016.5.24实验成绩:一、实验项目名称哲学家就餐问题二、实验目的利用PV操作解决哲学家就餐问题三、软硬件环境软件:VisualStudio2010硬件:PC机一台四、实验内容结果//哲学家就餐问题的解法#include#include#include#include#includeusingnamespacestd;//命名空间std内定义

2、的所有标识符都有效constunsignedintPHILOSOPHER_NUM=5;//哲学家数目constcharTHINKING=1;/*标记当前哲学家的状态,1表示等待,2表示得到饥饿,3表示正在吃饭*/constcharHUNGRY=2;constcharDINING=3;HANDLEhPhilosopher[5];//定义数组存放哲学家/*HANDLE(句柄)是windows操作系统中的一个概念。指的是一个核心对象在某一个进程中的唯一索引*/HANDLEsemaphore[PHILOSOPHER_NUM];//semaphore用来表示筷

3、子是否可用HANDLEmutex;//Mutex用来控制安全输出DWORDWINAPIphilosopherProc(LPVOIDlpParameter)//返回DWORD(32位数据)的API函数philosopherProc{intmyid;//哲学家idcharidStr[128];charstateStr[128];charmystate;intret;unsignedintleftFork;//左筷子unsignedintrightFork;//右筷子myid=int(lpParameter);itoa(myid,idStr,10);Wai

4、tForSingleObject(mutex,INFINITE);cerr<<"philosopher"<

5、HUNGRY");break;caseHUNGRY:strcpy(stateStr,"HUNGRY");ret=WaitForSingleObject(semaphore[leftFork],0);//先检查左筷子是否可用if(ret==WAIT_OBJECT_0){ret=WaitForSingleObject(semaphore[rightFork],0);//左筷子可用就拿起,再检查右筷子是否可用if(ret==WAIT_OBJECT_0){mystate=DINING;//右筷子可用,就改变自己的状态strcpy(stateStr,"DINI

6、NG");}else{ReleaseSemaphore(semaphore[leftFork],1,NULL);//如果右筷子不可用,就把左筷子放下}}break;caseDINING://吃完后把两支筷子都放下ReleaseSemaphore(semaphore[leftFork],1,NULL);ReleaseSemaphore(semaphore[rightFork],1,NULL);mystate=THINKING;//改变自己的状态strcpy(stateStr,"THINKING");break;}//输出状态WaitForSingleO

7、bject(mutex,INFINITE);cerr<<"philosopher"<

8、d(NULL,0,philosopherProc,LPVOID(i),CREATE_SUSPENDED,0)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。