用多线程同步方法解决哲学家就餐问题.doc
《用多线程同步方法解决哲学家就餐问题.doc》由会员分享,可在线阅读,更多相关《用多线程同步方法解决哲学家就餐问题.doc(13页珍藏版)》请在沃文网上搜索。
1、学院课程设计报告书课程名称: 操作系统原理 题 目: 用多线程同步方法解决哲学家就餐问题 系 名: 信息工程系 专业班级: 物联网 姓 名: 学 号: 4 指导教师: 2014 年 6 月 12 日word文档 可自由复制编辑武汉理工大学华夏学院信息工程系课 程 设 计 任 务 书课程名称: 操作系统原理课程设计 指导教师: 班级名称: 软件 开课系、教研室: 软件与信息安全 一、课程设计目的与任务操作系统课程设计是操作系统原理课程的后续实践课程,旨在通过一周的实践训练,加深学生对理论课程中操作系统概念,原理和方法的理解,加强学生综合运用操作系统原理、Linux系统、C语言程序设计技术进行实际
2、问题处理的能力,进一步提高学生进行分析问题和解决问题的能力,包含系统分析、系统设计、系统实现和系统测试的能力。学生将在指导老师的指导下,完成从需求分析,系统设计,编码到测试的全过程。二、课程设计的内容与基本要求1、课程设计题目 用多线程同步方法解决哲学家就餐问题2、课程设计内容本课程设计要求在Linux操作系统,GCC编译环境下开发。用c/c+语言在Linux操作系统环境下,通过研究Linux的线程机制和信号量实现哲学家就餐问题的并发控制。为避免死锁,可采用只许4个哲学家入席且桌上有5支筷子的办法。几把椅子可用连续存储单元。1 每个哲学家取得一双筷子开始用餐后,即时显示“Dining”和该哲学
3、家的标识符以及餐桌上有几位哲学家及其所坐的位置。2 设定共有10个哲学家需用餐。每位用餐耗时10秒钟以上。3 多个哲学家须共享操作函数代码。提示:1 有界缓冲区/连续存储区可用数组实现。2 编译命令可用:gcc -lpthread -o 目标文件名源文件名3 多线程编程方法参见电子文档。 3、设计报告撰写格式要求:1设计题目与要求 2 设计思想 3系统结构 4 数据结构的说明和模块的算法流程图 5 使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明6 运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)7 自我评价与总结 8 附录:程序清单,注意加注释(包括关键字、方法
4、、变量等),在每个模块前加注释;三、课程设计步骤及时间进度和场地安排本课程设计将安排在第17周, 教育技术中心。具体安排如下:第一天,下发任务书,学生查阅资料第二天,系统设计和原型开发第三,四天 系统功能实现第五天,系统调试 测试 打包和验收周次星期一星期二星期三星期四星期五第17周第1-8节第1-8节第1-8节第1-8节第1-8节地点现教241现教241现教241现教241现教241四、课程设计考核及评分标准课程设计考核将综合考虑学生考勤和参与度,系统设计方案正确性,系统设计和开发效果以及课程设计报告书的质量。具体评分标准如下:设置六个评分点(1)设计方案正确,具有可行性、创新性; 25分(
5、2)系统开发效果较好; 25分(3)态度认真、刻苦钻研、遵守纪律; 10分(4)设计报告规范、课程设计报告质量高、参考文献充分 20分(5)课程设计答辩概念清晰,内容正确 10分(6)课程设计期间的课堂考勤、答疑与统筹考虑。 10分 按上述六项分别记分后求和,总分按五级记分法记载最后成绩。优秀(10090分),良好(8089分),中等(7079分),及格(6069分),不及格(059分)1. 设计题目与要求:1.1. 用多线程同步方法解决哲学家就餐问题(Dining-Philosophers Problem)1.2. 要求:1.2.1. 每个哲学家取得一双筷子开始用餐后,即时显示“Dining
6、”和该哲学家的标识符以及桌上有几位哲学家及其所坐的位置。1.2.2. 设定共有10个哲学家需用餐。每位用餐耗时10秒钟以上。1.2.3. 多个哲学家须共享操作函数代码。2. 设计思想:2.1. 哲学家就餐问题,即共有5个哲学家绕一个圆桌做在5个位置上,他们每2个人中间有一只筷子,共5只筷子,只有当每个哲学家取得他左右两边的筷子时,哲学家才能开始就餐,其它时间,哲学家只能思考或等待筷子。为避免哲学家互相等待对方的筷子发生死锁,本次课程设计要求只许4个哲学家入席,以保证至少有一个哲学家能够进餐。2.2. 本课程设计将room 作为信号量,将其初始化为4,以保证只允许4个哲学家同时入席就餐,这样就能
7、保证至少有一个哲学家可以就餐。针对每个哲学家,通过共享操作函数代码,分别建立5个线程,以实现同步哲学家就餐,而申请进入餐厅的哲学家进入room 的等待队列,根据FIFO 的原则,总会进入到餐厅就餐,因此不会出现饿死和死锁的现象,针对5只筷子分别设置了5个互斥信号量,以保证每只筷子每次只能被取得一次。椅子筷子筷子筷子筷子筷子哲学家椅子椅子椅子哲学家椅子桌子3. 系统结构:哲学家哲学家哲学家哲学家哲学家哲学家哲学家哲学家一个桌子;五个椅子 ;十个哲学家;五支筷子4. 数据结构的说明和模块的算法流程图:4.1. 线程创建函数pthread_create声明如下:#include int pthrea
8、d_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 4.2. 1等待其它线程结束函数pthread_join声明如下:#include int pthread_join(pthread_t thread, void *retval);4.3. 信号量的数据类型为结构sem_t,它本质上是一个长整型的数。初始化信号量函数sem_init声明如下: #include sem_init (sem_t *sem, int pshared, unsigne
9、d int value);4.4. 增加信号量值函数sem_post声明如下:#include int sem_post(sem_t *sem);4.5. 减少信号量值函数sem_wait声明如下#include int sem_wait(sem_t * sem);4.6. 主要数据结构声明:#define NUMBERS 10 /将哲学家人数NUMBERS定义为10sem_t chopsticsNUMBERS /定义5只筷子的互斥信号量chopsticssem_t room /定义避免死锁的同步信号量room4.7. 线程共享函数伪代码:void *Share(int i)think();p
10、(room); /请求入席进餐 p(chopsticksetnumber); /请求左手边的筷子 p(chopsticksetnumber+1); /请求右手边的筷子eat();v (chopsticksetnumber); /释放左手边的筷子v(chopsticksetnumber+1); /释放右手边的筷子 v(room); /退出席位释放信号量chairs 开始建立桌椅和上菜设置哲学家是否有座位?等待坐座位左边是否有筷子?等待拿起左边的筷子右边是否有筷子?拿起右边的筷子吃饭哲学家吃完了离开座位,一边画圈圈结束等待YYYNNN流程图5. 运行结果和结果分析: 5.1. 运行结果:rootl
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多线程 同步 方法 解决 哲学家 就餐 问题
