




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学 操作系统 课程设计 学学 号 号 课课 程程 设设 计计 题题 目目 用多线程同步方法解决哲学家就餐问 题 Dining Philosophers Problem 学学 院院 计算机科学与技术学院 专专 业业 班班 级级 姓姓 名名 指导教师指导教师 精品文档 1欢迎下载 2010 年 6 月 28 日 目目录录 一 课程设计任务书 2 二 设计题目与要求 4 三 总体设计思想及系统平台 语言 工具 4 四 数据结构与模块说明 5 五 用户名 源程序名 目标程序名和源程序 6 六 运行结果与运行情况 7 七 调试记录 9 八 自我评析和总结 14 九 参考文献 14 十 评分表 15 精品文档 2欢迎下载 课程设计任务书课程设计任务书 3 3 学生姓名 学生姓名 专业班级 专业班级 指导教师 指导教师 工作单位 工作单位 计算机科学与技术学院计算机科学与技术学院 题目题目 用多线程同步方法解决哲学家就餐问题用多线程同步方法解决哲学家就餐问题 Dining Philosophers Dining Philosophers Problem Problem 初始条件 初始条件 1 操作系统 Linux 2 程序设计语言 C 语言 3 共有 5 个哲学家需用餐 只许 4 个哲学家入席且桌上有 5 支筷子 要求完成的主要任务要求完成的主要任务 包括课程设计工作量及其技术要求 以及说明书撰写等具 体要求 1 1 技术要求 技术要求 1 为每个哲学家产生一个线程 设计正确的同步算法 2 每个哲学家取得一双筷子开始用餐后 即时显示 Dining 和该 哲学家的自定义标识符以及餐桌上所有几位哲学家标识符及其所 坐的位置 3 设定共有 5 个哲学家需用餐 每位用餐耗时 10 秒钟以上 4 多个哲学家须共享操作函数代码 2 2 设计说明书内容要求 设计说明书内容要求 1 设计题目与要求 2 总的设计思想及系统平台 语言 工具等 3 数据结构与模块说明 功能与流程图 4 给出用户名 源程序名 目标程序名和源程序及其运行结果 要注明存储各个程序及其运行结果的 Linux 主机 IP 地址和 目录 5 运行结果与运行情况 提示 提示 1 连续存储区可用数组实现 2 编译命令可用 cc lpthread o 目标文件名 源文 件名 3 多线程编程方法参见附件 3 3 调试报告 调试报告 1 调试记录 精品文档 3欢迎下载 2 自我评析和总结 上机时间安排 上机时间安排 18 周一 五 08 0 12 00 指导教师签名 指导教师签名 年年 月月 日日 系主任 或责任教师 签名 系主任 或责任教师 签名 年年 月月 日日 用多线程同步方法解决哲学家就餐 问题 Dining Philosophers Problem 1 设计题目与要求 1 1 设计题目描述 用多线程同步方法解决哲学家就餐问题 Dining Philosophers Problem 1 2 要求 1 为每个哲学家产生一个线程 设计正确的同步算法 2 每个哲学家取得一双筷子开始用餐后 即时显示 Dining 和该哲学 家的自定义标识符以及餐桌上所有几位哲学家标识符及其所坐的位置 3 设定共有 5 个哲学家需用餐 每位用餐耗时 10 秒钟以上 4 多个哲学家须共享操作函数代码 2 总体设计思想及系统平台 语言 工具 2 1 总体设计思想 哲学家就餐问题 即共有 5 个哲学家绕一个圆桌做在 5 个位置上 他们每 2 个人中间有一只筷子 共 5 只筷子 只有当每个哲学家取得他左右两边的筷 子时 哲学家才能开始就餐 其它时间 哲学家只能思考或等待筷子 为避免 哲学家互相等待对方的筷子发生死锁 本次课程设计要求只许 4 个哲学家入席 以保证至少有一个哲学家能够进餐 本课程设计将 room 作为信号量 将其初始化为 4 以保证只允许 4 个哲学 精品文档 4欢迎下载 家同时入席就餐 这样就能保证至少有一个哲学家可以就餐 针对每个哲学家 通过共享操作函数代码 分别建立 5 个线程 以实现同步哲学家就餐 而申请 进入餐厅的哲学家进入 room 的等待队列 根据 FIFO 的原则 总会进入到餐厅 就餐 因此不会出现饿死和死锁的现象 针对 5 只筷子分别设置了 5 个互斥信 号量 以保证每只筷子每次只能被取得一次 2 2 系统平台 语言及工具 1 操作系统 Linux 2 程序设计语言 C 语言 3 工具 编辑工具 Vi 编译器 gcc 3 数据结构与模块说明 线程创建函数 pthread create 声明如下 include int pthread create pthread t thread pthread attr t attr Void start routine void void arg 等待其它线程结束函数 pthread join 声明如下 include int pthread join pthread t th void thread return 信号量的数据类型为结构 sem t 它本质上是一个长整型的数 初始化信号量函数 sem init 声明如下 include sem init sem t sem int pshared unsigned int value 增加信号量值函数 sem post 声明如下 include Sem post sem t sem 减少信号量值函数 sem wait 声明如下 精品文档 5欢迎下载 include Sem wait sem t sem 主要数据结构声明 define NUMBERS 5 将哲学家人数 NUMBERS 定义为 5 sem t chopstics NUMBERS 定义 5 只筷子的互斥信号量 chopstics sem t room 定义避免死锁的同步信号量 room 线程共享函数伪代码 void Share int i think wait room 请求入席进餐 wait chopstick i 请求左手边的筷子 wait chopstick i 1 5 请求右手边的筷子 eat signal chopstick i 释放左手边的筷子 signal chopstick i 1 5 释放右手边的筷子 signal room 退出席位释放信号量 chairs 4 用户名 源程序名 目标程序名和源程序 4 1 用户名 源程序名 目标程序名 用户名 源程序名 目标程序名 4 2 源程序 include include include 精品文档 6欢迎下载 include define NUMBERS 5 sem t chopstics NUMBERS sem t room sem t mutex int flag NUMBERS 0 0 0 0 0 int chairs NUMBERS 0 1 2 3 4 int i j void Share int threadid int main int error pthread t threads NUMBERS for i 0 i NUMBERS i sem init sem init sem init for i 0 i NUMBERS i error pthread create if error printf ERROR thread create failed exit 1 精品文档 7欢迎下载 for i 0 i NUMBERS i pthread join threads i NULL void Share int threadid int i threadid sem wait flag i 1 sem wait printf philosopher d get chopstics d n i i sem wait printf philosopher d get chopstics d n i i 1 NUMBERS sem wait printf n n printf Dining n printf philosopher d on chairs d and eating n i chairs i for j 0 j NUMBERS j if j i sleep 3 sem post sem post sem post printf philosopher d is full and put down chopstics d and d and 精品文档 8欢迎下载 left n i i i 1 NUMBERS printf n n flag i 0 sem post 5 运行结果 6 调试记录 1 将写好的代码进行编译 出现如下错误提示 1 c text 0 x37 undefined reference to sem init 1 c text 0 x6a undefined reference to sem init 1 c text 0 x86 undefined reference to sem init 1 c text 0 xc8 undefined reference to pthread create 1 c text 0 x108 undefined reference to pthread join tmp ccq8XD3O o In function Share 1 c text 0 x13f undefined reference to sem wait 1 c text 0 x160 undefined reference to sem wait 1 c text 0 x1b0 undefined reference to sem wait 1 c text 0 x1f7 undefined reference to sem wait 1 c text 0 x2ad undefined reference to sem post 1 c text 0 x2c0 undefined reference to sem post 1 c text 0 x2f5 undefined reference to sem post 1 c text 0 x35d undefined reference to sem post collect2 ld returned 1 exit status 检查发现 pthread 库不是 Linux 系统默认的库 连接时需要使用库 libpthread a 所以在使用 pthread create 创建线程时 在编译中 要加 lpthread 参数 gcc lpthread o 1 1 c 2 重新编译代码 出现如下错误提示 精品文档 9欢迎下载 1 c 9 error invalid initializer 1 c 10 error invalid initializer 1 c In function main 1 c 35 warning incompatible implicit declaration of built in function exit 1 c In function Share 1 c 48 error incompatible types when assigning to type sem t from type int 1 c 71 error expected before sem post 1 c 76 error incompatible types when assigning to type sem t from type int 仔细查看代码 发是对信号灯初始不能在定义的时候直接初始化 改用 sem init 函数对 room mutex 和 flag 进行初始化 去掉 exit 函数 找到 缺少 的地方 添加 3 重新编译 连接 运行程序 出现如下错误提示 1 c In function Share 1 c 48 error incompatible types when assigning to type sem t from type int 1 c 76 error incompatible types when assigning to type sem t from type int 查看代码 发现对信号灯 flag 使用出错 将 flag i 1 改为 sem wait PAUL J DEITEL DAVID R CHOFFNES 清华大学出版社 本科生课程设计成绩评定表本科生课程设计成绩评定表 班级 姓名 学号 序号评分项目满分实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中级质量工程师综合知识精益企业模拟试题(附答案)
- 伦理委员会考核试题(附答案)
- 三级营销员模拟题库与答案
- 中外服装史知到智慧树答案
- 特殊药品培训试卷及答案
- 冷藏药品培训考试题及答案
- 2025年度房地产抵押贷款经纪服务协议
- 2025版土石方运输合同绿色运输能力评估合同
- 2025电梯保养服务与智能监控系统集成合同
- 2025版尿素原料采购及仓储物流服务合同
- 《液压与气动控制》课件
- 语言学概论-第三章-语义
- 2024-2025学年广东省深圳实验学校初中部九年级上学期开学考英语试题及答案
- 邮政快递员技能大赛理论考试题库(含答案)
- 《电动航空器电推进系统技术规范》
- 结肠造瘘还纳术手术配合
- 2024年山东省建筑施工企业主要负责人A类考试题库及答案(典型题)
- 特种设备目录新旧对照表
- 2024年初一英语阅读理解专项练习及答案
- 陪诊师与公司签订协议书范文
- 喀什德力克油田科技有限公司30万立方米-日油田伴生放空天然气回收利用项目
评论
0/150
提交评论