哲学家就餐问题实验报告(共5页).doc

上传人:飞****2 文档编号:13886908 上传时间:2022-05-01 格式:DOC 页数:5 大小:70KB
返回 下载 相关 举报
哲学家就餐问题实验报告(共5页).doc_第1页
第1页 / 共5页
哲学家就餐问题实验报告(共5页).doc_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《哲学家就餐问题实验报告(共5页).doc》由会员分享,可在线阅读,更多相关《哲学家就餐问题实验报告(共5页).doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上 南昌大学实验报告学生姓名: 倪焕 学 号: 专业班级: 软件工程141班 实验类型: 验证 综合 设计 创新 实验日期: 2016.5.24 实验成绩: 一、 实验项目名称 哲学家就餐问题二、实验目的 利用PV操作解决哲学家就餐问题三、 软硬件环境 软件:Visual Studio2010 硬件:PC机一台四、 实验内容结果/哲学家就餐问题的解法#include #include #include #include #include using namespace std; /命名空间std内定义的所有标识符都有效const unsigned int PHILOSO

2、PHER_NUM=5; /哲学家数目const char THINKING=1; /*标记当前哲学家的状态,1表示等待,2表示得到饥饿,3表示正在吃饭*/const char HUNGRY=2;const char DINING=3;HANDLE hPhilosopher5; /定义数组存放哲学家 /*HANDLE(句柄)是windows操作系统中的一个概念。指的是一个核心对象在某一个进程中的唯一索引*/HANDLE semaphorePHILOSOPHER_NUM; / semaphore 用来表示筷子是否可用HANDLE mutex; / Mutex用来控制安全输出DWORD WINAPI

3、 philosopherProc( LPVOID lpParameter) /返回 DWORD(32位数据)的 API 函数philosopherProc int myid; /哲学家id char idStr128; char stateStr128; char mystate; int ret; unsigned int leftFork; /左筷子 unsigned int rightFork; /右筷子 myid = int(lpParameter); itoa(myid, idStr, 10); WaitForSingleObject(mutex, INFINITE); cerr p

4、hilosopher myid begin. endl; ReleaseMutex(mutex); mystate = THINKING; /初始状态为THINKING leftFork = (myid) % PHILOSOPHER_NUM; rightFork = (myid + 1) % PHILOSOPHER_NUM; while (true) switch(mystate) case THINKING: mystate = HUNGRY; / 改变状态 strcpy(stateStr, HUNGRY); break; case HUNGRY: strcpy(stateStr, HUNG

5、RY); ret = WaitForSingleObject(semaphoreleftFork, 0); / 先检查左筷子是否可用 if (ret = WAIT_OBJECT_0) ret = WaitForSingleObject(semaphorerightFork, 0); /左筷子可用就拿起,再检查右筷子是否可用 if (ret = WAIT_OBJECT_0) mystate = DINING; / 右筷子可用,就改变自己的状态 strcpy(stateStr, DINING);elseReleaseSemaphore(semaphoreleftFork, 1, NULL); /

6、如果右筷子不可用,就把左筷子放下 break; case DINING: / 吃完后把两支筷子都放下 ReleaseSemaphore(semaphoreleftFork, 1, NULL); ReleaseSemaphore(semaphorerightFork, 1, NULL); mystate = THINKING; / 改变自己的状态 strcpy(stateStr, THINKING); break; / 输出状态 WaitForSingleObject(mutex, INFINITE); cerr philosopher myid is : stateStr endl; Rele

7、aseMutex(mutex); Sleep(5000);int main() int i,run; run = 1; mutex = CreateMutex(NULL, false, NULL); for (i=0; iPHILOSOPHER_NUM; i+) semaphorei = CreateSemaphore(NULL, 1, 1, NULL); /创建一个新的信号量 hPhilosopheri=CreateThread(NULL,0,philosopherProc,LPVOID(i), CREATE_SUSPENDED,0); /创建一个新线程 ResumeThread(hPhilosopheri); /线程恢复函数 Sleep(15); while(run) Sleep(5000); cerr*endl; return 0;五、实验体会 通过本次实验,首先是对哲学家就餐问题有了更深的了解,而通过PV操作,很好的解决了哲学家就餐问题,这使得我对PV操作更加熟悉,同时帮助我理解了原先不太懂的地方,希望强加练习。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁