课程设计报告
(本科/专科)
课程:
学号:
姓名:
班级:
教师:
时间:
操作系统课程设计
2012.12.7 -2013.1.7
计算机科学与技术系
设计名称:
哲学家进餐问题
设计内容、目的与要求:
实验目的:通过实现哲学家进餐问题的同步深入了解和掌握进程同步和互斥的原
理。
内容和要求: 哲学家有N 个,也定全体到达后开始讨论:在讨论的间隙哲学家
进餐,每人进餐时都需使用刀、叉各一把,所有哲学家刀和叉都拿到后才能进餐。
哲学家的人数、餐桌上的布置自行设定,实现刀和叉的互斥使用算法的程序实现。
计划与进度安排:
1
1:设置初始条件(12 月17 号)
(1)操作系统:windows
(2)程序设计语言:C++
(3)设定圆桌上有六个哲学家,三对刀叉。
2:详细设计:(12 月 18 号至 1 月 6 号)
(1):设计一个程序,能够显示当前各哲学家的状态和桌上餐具的使用情况,并
能无死锁的推算出下一状态各哲学家的状态和桌上餐具的使用情况。即设计一个
能安排哲学家正常生活的程序。
(2):为哲学家设计 3 种状态,即“等待”“进餐”“思考”。每个哲学家重复进
行“等待”->“进餐”->“思考”的行动循环。
(3):确定程序模块。
(4):编写程序。
(5):调试修改。
(6):结果分析。
设计过程、步骤(可加页):
2
1. 分工:汤正愿:课题分析,模块设计,主函数的编写;
2.确定数据结构
洪志飞:课题分析,模块设计,子函数的编写。
Philosopher
-number:int
-status:int
+Philosopher(in num:int)
+find() const:int
+getinfo() const:int
+Change():void
图 3-1 哲学家类的 UML 图
程序中定义一个哲学家类,包含两个私有对象和四个公有对象。
Number 对象:报讯哲学家的编号。
Status 对象:用于保存当前该哲学家的状态,0 表示正在等待(即处于饥饿状态)
1 表示得到餐具正在吃饭,2 表示正在思考
Philosopher(int num)方法:哲学家类构造函数,参数 num 表示哲学家编号
find() const 方法:返回该哲学家编号
getinfo() const 方法:返回哲学家当前状态
Change()方法:根据题目要求改变哲学家的状态(等待->进餐->思考->等
待…………)
另外,程序中包含一个公有对象,bool 类型数组 tools[6],用来保存 6 把餐当前
状态:true 表示该餐具当前空闲,false 表示该餐具当前正被使用。
程序中还包含两个公有函数:print 和 toolstatus。Print 用来返回一个哲学家的状
态,toolstatus 用来返回一个餐具的状态。
3.模块分析。
(1)主程序模块:
3
(2)状态改变模块:
4
(3)返回哲学家状态模块:
5
(4)返回餐具状态模块:
6
结果与分析(可以加页):
7