1、* 实践教学实践教学 * 计算机与通信学院 2011 年秋季学期 操作系统操作系统 课程设计课程设计 题 目:理发师问题的实现 专业班级:计算机科学与技术 姓 名: 学 号: 指导教师: 成 绩: 摘摘 要要 理发师问题是一个利用信号量进行 PV操作的经典问题。设计程 序实现此问题, 要使得理发师的活动与顾客的活动得到各自真实的模 拟。所执行的程序应体现:理发师在没有顾客的时候去睡觉,有顾客 则工作;顾客在理发师工作时坐下等待,无座时离开,直至等到理发 师自己理发。 关键字:理发师,顾客,PV 操作。 目录目录 摘 要 . 2 1 设计要求 4 1.1 初始条件 . 4 1.2 技术要求 .
2、4 2 总体设计思想及开发环境与工具 . 4 2.1 总体设计思想. 4 2.2 多线程编程原理 . 5 2.2.1 创建一个线程 5 2.2.2 等待一个线程结束 . 5 2.2.3 信号量. 6 2.3 伪码实现 6 2.4 开发环境与工具 . 8 3 数据结构与模块说明 . 8 3.1 数据结构 8 3.2 函数的调用关系图 8 3.2.1 主函数模块 8 3.2.2 理发师模块 9 3.2.3 顾客模块 . 10 5 运行结果 . 10 5.1 运行步骤 10 5.2 测试结果 .11 5.2.1 编辑,编译和运行的过程图 11 5.2.2 错误部分截图 12 5.2.3 正确运行结果
3、图 12 设计总结 16 参考文献 17 致谢. 18 附录(源程序代码) 19 1 1 设计要求设计要求 1.11.1 初始条件初始条件 (1)操作系统:Linux (2)程序设计语言:C 语言 (3)设有一个理发师,5 把椅子(另外还有一把理发椅) ,几把椅子可用连续 存储单元。 1.21.2 技术要求技术要求 (1)为每个理发师顾客产生一个线程,设计正确的同步算法 (2)每个顾客进入理发室后,即时显示“Entered” 及其线程自定义标识,还同 时显示理发室共有几名顾客及其所坐的位置。 (3)至少有 10 个顾客,每人理发至少 3 秒钟。 (4)多个顾客须共享操作函数代码。 2 2 总体
4、设计思想及总体设计思想及开发环境与工具开发环境与工具 2.1 2.1 总体设计思想总体设计思想 题目中要求描述理发师和顾客的行为,因此需要两类线程 barber()和 customer ()分别描述理发师和顾客的行为。其中,理发师有活动有理发和睡觉两 个事件;等待和理发二个事件。店里有固定的椅子数,上面坐着等待的顾客,顾 客在到来这个事件时,需判断有没有空闲的椅子,理发师决定要理发或睡觉时, 也要判断椅子上有没有顾客。所以,顾客和理发师之间的关系表现为: (1)理发师和顾客之间同步关系:当理发师睡觉时顾客近来需要唤醒理发师 为其理发,当有顾客时理发师为其理发,没有的时候理发师睡觉。 (2)理发师和顾客之间互斥关系:由于每次理发师只能为一个人理发,且可 供等侯的椅子有限只有 n把,即理发师和椅子是临界资源,所以顾客之间是互斥 的关系。 (3)故引入 3 个信号量和一个控制变量: 控制变量 waiting用来记录等候理发的顾客数,