




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统课程设计操作系统课程设计 课程设计报告课程设计报告 课课题 题 利用信号量和多线程机制实现利用信号量和多线程机制实现 哲学家进餐哲学家进餐 问题问题 所在学院 信息工程学院信息工程学院 班 级 计科计科 12011201 学 号 121404112140411414 姓 名 魏魏 祥祥 指导教师 徐向英徐向英 2015 年 1 月 1 日 目录目录 一 课程设计目标 3 二 课题内容 3 三 设计思路 3 四 源代码 5 五 运行与测试 9 六 心得体会 10 一 课程设计目标一 课程设计目标 学习多线程编程 使用线程的同步机制实现 哲学家进餐 问题 具体要求 1 创建 POSIX 线程 实现多线程的并发执行 验证多线程共享进程资源的特 性 2 使用互斥量和条件变量 或使用信号量实现线程的同步互斥 3 验证 哲学家进餐 问题中的死锁情况 并加以解决 二 课题内容二 课题内容 哲学家进餐问题由 Dijkstra 提出 问题描述有五个哲学家共用一张圆桌 分别坐在周围的五张椅子上 在圆桌上有五个碗和五支筷子 他们的生活方式 是交替地进行思考和进餐 平时 一个哲学家进行思考 饥饿时便试图取用其 左右最靠近他的筷子 只有在他拿到两只筷子时才能进餐 进餐完毕 放下筷 子继续思考 本次课题要求使用多线程和信号量解决哲学家进餐问题 并演示产生死锁 的情况 三 设计思路三 设计思路 经分析可知 放在桌子上的筷子是临界资源 在一段时间内只允许以为 哲学家使用 为了实现对筷子的互斥 可以用一个信号量表示一只筷子 由着 五个信号量构成信号量数组 当哲学家饥饿时总是先去拿左筷子 成功后在拿右筷子 当五位哲学家 同时拿起左筷子 这是每位哲学家都没有右筷子可以拿 就会造成死锁 思路思路 1 利用记录型信号量 利用记录型信号量 设置值为 4 的记录型信号量 至多只允许四位哲学家同时去拿左筷 子 leftStick getSema acquire 只有拿到左筷子 才能继续拿右筷子 rightStick getSema acquire 拿到两双筷子之后便可以用餐 用餐完毕 先 放下左筷子 leftStick getSema release 再放下右筷子 rightStick getSema release 这样便可以避免思索问题 思路思路 2 利用 利用 AND 型信号量型信号量 要求每个哲学家必须获取两个筷子的时候才能够进餐 只得到一只 筷子不能进餐时 要求释放那一只筷子 可以使用 AND 型信号量将左筷子和 右筷子信号量的获取组成一个原子操作 如此也可以避免死锁问题 本次课程设计是在 windows 系统下完成 编程语言为 java 开发环境 Eclipse 由于在 java 语言中使用记录型信号量更为方便 所以本次课题我使用的 是思路一 static Semaphore room new Semaphore 4 设置值为 4 的记录型信号量 至多只允许四个哲学家同时拿起左筷子 private Semaphore semaphore new Semaphore 1 在筷子类中为筷子设置值为 1 信号量 room acquire 获取值为4的信号量 leftStick getSema acquire 获取左筷子信号量 Thread sleep 1000 1 拿到左筷子之后等待2秒 观察死锁 rightStick getSema acquire 获取右筷子信号量 eat Thread sleep 1000 2 用完餐后等待2秒 继续思考 finishEat leftStick getSema release 释放左筷子信号量 rightStick getSema release 释放右筷子信号量 room release 释放值为4的信号量 当需要演示死锁的情况是 只需要将 room acquire 和 room release 这两行注释掉 取消至多只允许四位哲学家一起拿起左筷子的限制 就会产生 死锁 ChopStick chopStick new ChopStick 5 for int i 0 i 5 i chopStick i new ChopStick i New 出编号 0 到 4 的五支筷子 Philosopher ph0 new Philosopher 0 chopStick 0 chopStick 1 Philosopher ph1 new Philosopher 1 chopStick 1 chopStick 2 Philosopher ph2 new Philosopher 2 chopStick 2 chopStick 3 Philosopher ph3 new Philosopher 3 chopStick 3 chopStick 4 Philosopher ph4 new Philosopher 4 chopStick 4 chopStick 0 New 出编号 0 到 4 的五位哲学家 他们分别对应着自己的左 右两支筷子 ExecutorService excutor Executors newFixedThreadPool 5 5 位哲学家用餐 所以需要 5 个线程同时执行 创建容量为 5 的线程池 四 源代码四 源代码 在 Windows 下运行 筷子类筷子类 ChopStick java import java util concurrent Semaphore public class ChopStick private int ID private boolean available private Semaphore semaphore new Semaphore 1 public ChopStick int ID this ID ID this available true this semaphore new Semaphore 1 public void setAvai boolean available this available available public boolean getAvai return this available public Semaphore getSema return this semaphore public void setSema Semaphore sema this semaphore sema public int getId return this ID 哲学家类哲学家类 Philosopher java import java util concurrent Semaphore public class Philosopher implements Runnable private int ID static Semaphore room new Semaphore 4 private ChopStick leftStick private ChopStick rightStick public Philosopher int ID ChopStick cs1 ChopStick cs2 this ID ID this leftStick cs1 this rightStick cs2 public void getLeftChopStick this leftStick setAvai false public int getId return ID public void eat leftStick setAvai false rightStick setAvai false System out println 哲学家 this getId 正在用餐 public void think System out println 哲学家 this getId 正在思考 public void finishEat System out println 哲学家 this getId 用餐结束 正在思考 leftStick setAvai true rightStick setAvai true public void readyToEat System out println 哲学家 this getId 饿了准备用餐 public void cannotEat System out println 哲学家 this getId 缺少筷子 不能用餐 等待 public void run try room acquire this readyToEat if this leftStick getSema availablePermits 0 this leftStick getSema availablePermits 0 this cannotEat this leftStick getSema acquire Thread sleep 1000 1 this rightStick getSema acquire this eat Thread sleep 1000 2 this finishEat this leftStick getSema release this rightStick getSema release room release catch InterruptedException ex ex toString 测试测试 Test java import java util concurrent import java util Scanner public class Test public static void main String args Scanner input new Scanner System in menu int choice input nextInt while choice 1 if choice 0 ChopStick chopStick new ChopStick 5 for int i 0 i 5 i chopStick i new ChopStick i ExecutorService excutor Executors newFixedThreadPool 5 Philosopher ph0 new Philosopher 0 chopStick 0 chopStick 1 excutor execute new Philosopher 0 chopStick 0 chopStick 1 excutor execute new Philosopher 1 chopStick 1 chopStick 2 excutor execute new Philosopher 2 chopStick 2 chopStick 3 excutor execute new Philosopher 3 chopStick 3 chopStick 4 excutor execute new Philosopher 4 chopStick 4 chopStick 0 excutor shutdown choice input nextInt menu public static void menu System out println 0 演示 System out println 1 结束 五 运行与测试五 运行与测试 1 运行界面运行界面 2 死锁演示死锁演示 3 无死锁演示无死锁演示 六 心得体会六 心得体会 本次课程设计我总得来说花的时间不是太多 代码加起来一共不超过两百 行 我只用了一种思路来完成 思路一完成之后 我也尝试着用思路二完成 但是 AND 型信号量的问题很难解决 最后便放弃了 拿到课题之前我对哲学 家进餐问题了解的还不是很透彻 我利用网络和查询课本彻底搞懂了哲学家进 餐问题 并且得到两种解决思路 通过此次的课程设计 我想我对多线程的编 程理解更深了一点 虽然说死锁的出现几率不是非常的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 17481-2025添加剂预混合饲料中氯化胆碱的测定
- 2025广西物流职业技术学院招聘教职人员控制数205人模拟试卷带答案详解
- 2025福建三明机场发展集团有限公司招聘3人模拟试卷有完整答案详解
- 2025贵州贵阳学院高层次人才引进15人考前自测高频考点模拟试题及答案详解(新)
- 2025江苏兴化市招聘教师67人模拟试卷及完整答案详解1套
- 安全培训教师安全职责课件
- 2025年东北农业大学专职辅导员公开招聘16人考前自测高频考点模拟试题及答案详解(网校专用)
- 2025江西吉安市井冈山大学招聘177人考前自测高频考点模拟试题及答案详解(名校卷)
- 2025内蒙古赤峰市克旗银都矿业招聘4人考前自测高频考点模拟试题附答案详解(模拟题)
- 2025年湖南湘西州吉首市石家冲街道卫生服务中心招聘见习生考前自测高频考点模拟试题附答案详解(考试直接用)
- 2025年新版中层副职面试题及答案
- 蜂窝组织炎护理小讲课
- 智慧树知道网课《工业机器人技术基础》课后章节测试满分答案
- (一检)泉州市2026届高三高中毕业班质量监测(一)数学试卷(含标准答案)
- 2025年福建省榕圣建设发展有限公司项目招聘12人笔试参考题库附带答案详解
- 矿山设备检修安全培训课件
- 2025-2030数据安全合规审计服务市场爆发及等保测评机构并购价值评估
- 纤维转盘滤布滤池运行维护技术说明
- 生物基础电子教案分享
- 小学六年级体育教案(全册48课时)
- 不可撤销跟单信用证申请书中英文
评论
0/150
提交评论