全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三南通大学杏林学院 操作系统实验报告实验名称 哲学家吃通心面问题 班级 软件101 姓名 张孝民 学号 1013103032一、 实验目的1. 通过各种方式(查阅图书、上网等)查找哲学家吃通心面问题方面的相关知识,学会自己主动通过各种途径去寻求解决问题的方法;2. 积极主动去了解哲学家吃通心面问题方面的相关知识,加深自己对哲学家吃通心面问题的理解;3.学习和掌握采用信号量和PV操作的方法去解决哲学家吃通心面问题及其他类似问题。二、实验内容1.实验环境:Microsoft Visual C+ 6.02.实验内容:有5位哲学家围坐在一张圆桌旁,桌子中央放有一盘通心面,每人面前有一个空盘子,每两人之间放一把叉子;每位哲学家思考、饥饿,然后吃通心面;为了吃面,哲学家必须获得两把叉子,且每人只能直接从紧邻自己的左边或右边去取叉子。试编一程序,采用信号量和PV操作的方法解决哲学家吃通心面问题。三、实验步骤1.实验课上,通过上网登录校图书馆中文数据库或搜索网页,查找有关哲学家吃通心面问题方面的相关资料;2.实验课下,主动到校图书馆查找有关哲学家吃通心面问题方面的相关资料,深入了解了哲学家吃通心面问题;3. 根据自己所找到的相关信息,编程实现、组织成一篇实验报告并提交。用C+语言编程实现如下:#include#include#include#include#include /一些变量和函数的声明CRITICAL_SECTION mmutex; /用于互斥的临界区HANDLE Fork_5;HANDLE Room_;int usetime5=0,0,0,0,0;int eattime=1; /生成两个整数之间的随机数int random_integer(int low,int high)if(low=high) return low; else return low+rand()%(high-low); /定义一个线程函数DWORD WINAPI philosopher(LPVOID n) int k=(int)n; :OpenSemaphore(MUTEX_ALL_ACCESS,false,room); switch(k) case 0: :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork1); :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork2); break; case 1: :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork2); :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork3); break; case 2: :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork3); :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork4); break; case 3: :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork4); :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork5); break; case 4: :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork5); :OpenSemaphore(MUTEX_ALL_ACCESS,false,fork1); break; int i=1; while(eattime) cout单位时间:i - ; if(random_integer(1,10)3) :WaitForSingleObject(Room_,INFINITE); :WaitForSingleObject(Fork_k,INFINITE); :WaitForSingleObject(Fork_(k+1)%5,INFINITE); EnterCriticalSection(&mmutex); usetimek+; cout哲学家 k+1取得两个叉子进食.endl; LeaveCriticalSection(&mmutex); :ReleaseSemaphore(Fork_(k+1)%5,1,NULL); :ReleaseSemaphore(Fork_k,1,NULL); :ReleaseSemaphore(Room_,1,NULL); else cout哲学家 k+1在进行思考!endl; Sleep(500); i+; :CloseHandle(Fork_k); return 0; /主函数int main() cout*哲学家就餐问题*endl;int i; Room_=:CreateSemaphore(NULL,4,4,room); Fork_0=:CreateSemaphore(NULL,1,1,fork1); Fork_1=:CreateSemaphore(NULL,1,1,fork2); Fork_2=:CreateSemaphore(NULL,1,1,fork3); Fork_3=:CreateSemaphore(NULL,1,1,fork4); Fork_4=:CreateSemaphore(NULL,1,1,fork5); InitializeCriticalSection(&mmutex); for(i=0;i5;i+) :CreateThread(NULL,0,philosopher,(void*)i,0,0); Sleep(10000); eattime=0; Sleep(200); cout*endl; for(i=0;i5;i+) cout哲学家i+1吃面条用了:usetimei个单位时间!endl; cout结束endl; return 0;程序运行结果为:四、实验结论1.通过自己主动查找哲学家吃通心面问题方面的相关知识,培养和加强了自己主动通过各种途径去寻求解决问题的方法的能力;2.通过自己积极主动去了解哲
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基础护理操作对患者舒适度的保障作用
- 2026年中考语文一轮复习:统编教材古诗词曲鉴赏85篇 常考必背知识点汇编
- 2026年中考数学一轮复习专项训练:几何证明之圆中的线段长度问题
- 2026年中考语文名著导读抢分练《儒林外史》解析版
- 医学生基础医学 妇科护理新技术护理课件
- Unit 3 Same or Different 人与社会:我与我的朋友-人教版八年级英语上册话题阅读专练
- 2026全国春季高考英语学业考试总复习:名词数词(知识梳理+考点讲义)解析版
- 2026外研版高考英语复习讲义:选择性必修第二册 Unit 6 Survival
- 2026全国春季高考物理学业考试总复习:圆周运动(知识梳理+考点)解析版
- 2026年高考化学教材重点实验复习清单:化学反应原理(二)学生版
- 四川省九市2022级(2025届)高三一诊语文试卷(含答案)
- 南京理工大学紫金学院《数字媒体图像处理》2023-2024学年第一学期期末试卷
- 创伤的诊断与治疗
- 2024年世界职业院校技能大赛中职组“婴幼儿保育组”赛项考试题库-下(多选、判断题)
- 肥胖与糖尿病
- 科研伦理与学术规范考试试题库2020年
- 绿化养护方案(投标方案)
- 超重和失重 课件-2024-2025学年高一上学期物理人教版(2019)必修第一册
- 初中语文修改病句市公开课一等奖省赛课获奖课件
- 《乌有先生历险记》原文及翻译
- 一年级排队问题专项归纳练习和答案
评论
0/150
提交评论