操作系统课程设计---理发师问题的实现

上传人:新** 文档编号:563499815 上传时间:2022-08-14 格式:DOCX 页数:19 大小:164.03KB
返回 下载 相关 举报
操作系统课程设计---理发师问题的实现_第1页
第1页 / 共19页
操作系统课程设计---理发师问题的实现_第2页
第2页 / 共19页
操作系统课程设计---理发师问题的实现_第3页
第3页 / 共19页
操作系统课程设计---理发师问题的实现_第4页
第4页 / 共19页
操作系统课程设计---理发师问题的实现_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《操作系统课程设计---理发师问题的实现》由会员分享,可在线阅读,更多相关《操作系统课程设计---理发师问题的实现(19页珍藏版)》请在金锄头文库上搜索。

1、操作系统课程设计-理发 师问题的实现(总18页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March实践教学兰州理工大学计算机与通信学院2011 年秋季学期操作系统课程设计题目:理发师问题的实现专业班级:计算机科学与技术姓名:学 号:指导教师:成 绩:摘要理发师问题是一个利用信号量进行PV操作的经典问题。设计程序实现此问题,要使得理发师的活动与顾客的活动得到各自真实的模 拟。所执行的程序应体现:理发师在没有顾客的时候去睡觉,有顾 客则工作;顾客在理发师工作时坐下等待,无座时离开,直至等到 理发师自己理发。关键字

2、:理发师,顾客,PV操作。目录摘 要 错误!未定义书签。1 设计要求 错误!未定义书签初始条件 错误!未定义书签技术要求 错误!未定义书签2 总体设计思想及开发环境与工具 错误!未定义书签总体设计思想错误!未定义书签多线程编程原理错误!未定义书签创建一个线程 错误!未定义书签等待一个线程结束错误!未定义书签信号量 错误!未定义书签伪码实现错误!未定义书签开发环境与工具错误!未定义书签3 数据结构与模块说明 错误!未定义书签数据结构错误!未定义书签函数的调用关系图错误!未定义书签主函数模块 错误!未定义书签理发师模块 错误!未定义书签顾客模块 错误!未定义书签5 运行结果 错误!未定义书签运行步

3、骤 错误!未定义书签测试结果 错误!未定义书签编辑,编译和运行的过程图错误!未定义书签错误部分截图 错误!未定义书签正确运行结果图错误!未定义书签设计总结错误!未定义书签参考文献错误!未定义书签致谢 错误!未定义书签附录(源程序代码)错误!未定义书签。1设计要求初始条件(1) 操作系统:Linux( 2 )程序设计语言: C 语言( 3)设有一个理发师, 5 把椅子(另外还有一把理发椅),几把椅子可用连 续存储单元。技术要求(1) 为每个理发师顾客产生一个线程,设计正确的同步算法(2) 每个顾客进入理发室后,即时显示“Entered”及其线程自定义标识,还同时显示理发室共有几名顾客及其所坐的位

4、置。(3) 至少有10 个顾客,每人理发至少3 秒钟。( 4)多个顾客须共享操作函数代码。 2总体设计思想及开发环境与工具 总体设计思想题目中要求描述理发师和顾客的行为,因此需要两类线程barber()和 customer ()分别描述理发师和顾客的行为。其中,理发师有活动有理发和睡觉 两个事件;等待和理发二个事件。店里有固定的椅子数,上面坐着等待的顾 客,顾客在到来这个事件时,需判断有没有空闲的椅子,理发师决定要理发或 睡觉时,也要判断椅子上有没有顾客。所以,顾客和理发师之间的关系表现 为:1)理发师和顾客之间同步关系:当理发师睡觉时顾客近来需要唤醒理发师为其理发,当有顾客时理发师为其理发,

5、没有的时候理发师睡觉。(2) 理发师和顾客之间互斥关系:由于每次理发师只能为一个人理发,且 可供等侯的椅子有限只有 n 把,即理发师和椅子是临界资源,所以顾客之间是 互斥的关系。(3) 故引入 3 个信号量和一个控制变量:i控制变量waiting用来记录等候理发的顾客数,初值为0;ii信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程, 初值为 0;iii信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为1; iv信号量mutex用于互斥,初值为1多线程编程原理此次在 Linux 下进行多线程编程需要用到 pthread_create 和 pth

6、read_join 这两个 函数。2.2.1 创建一个线程pthread_create 用来创建一个线程,原型为:extern int pthread_create(pthread_t *_thread, _const pthread_attr_t*_attr,void *(*_start_routine) (void *), void *_arg)第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三 个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。函数 thread 不需要参数时,最后一个参数设为空指针。第二个参数设为空指针时, 将生成默认属性的线程。创建线程成功

7、后,新创建的线程则运行参数三和参数 四确定的函数,原来的线程则继续运行下一行代码。2.2.2 等待一个线程结束pthread_join 用来等待一个线程的结束,函数原型为:extern int pthread_join _P (pthread_t _th, void *_thread_return);第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可 以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一 直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。2.2.3 信号量(1)函数sem init ()用来初始化一个信号量,函数原型为

8、:extern int sem injt- P (sem t *_sem, int _pshared, unsigned int _value);F冶为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共 享,否则只能为当前进程的所有线程共享;value给出了信号量的初始值。(2)函数sem_pOst( set *sem )用来增加信号量的值。当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在semQ4线程的调度策略决定的。 二阻塞,选择机制同样(3)函数sem_waitfsem_t*sem )被用来阻塞当前线程直到信号量 true-sem的值大m_wait ()的

9、非阻塞版本,它直接将于o,解除阻塞后将舟gm的值减一, sem_trywait ( sem_t *sem )是函数 se 信号量sem的值减.表明公共资源经使用后减少。函数伪码实现dif ine n 5;trui&F创建顾客进程1一一3.2.13.2.2signalfcLEtaniersj+JwaitlbarbersJ+J3.2.3Sleep in gBarber测试结果编辑,编译和运行的过程图Get Help m Wr iteOut-廻 Read Fil已寧 Prev Peg己逻 Cut Text 響 Cur Pos Ex itR Justify 觸 Where Is 剧 Next Page

10、K UnCut TxtS To Spellrj070234jsjserver:Xr i 0702 3 4 i si server$ nano SleepingB 且匸 tier. cri0702 340 j sjserver$ cc - Lpthread - S1 eep ingBarber SleepingBarbe匸 i二r i0702 34 j sjserver - $ / S1 eep ingBarber|5.2.2错误部分截图出 rjO7O2340jsjserver:r i0702 34 i sjserver ? cc - Lpthread 一口 S1 eep ingBarber S

11、1 eepingB arber u bleep ingBarJjer i二: InS leeti inaEarljer c : 86 :S leep ingBarljer c : 87 :2! lcep ingEciukien onceS leep ingBarlje匸Sleepi ngE arlz e r af unc 1.1 n c us tuine 匸 1 :inissina teriuinatina characterand1 undeclared (first, use in this function) f E-zich undec 1-zir ed idnt if ier is

12、匸巴p口匸 t匸己 Dulyerrur:errur:匸匸匸口匸;S7:87 :87:H7:102 :1U3 :error:e tr r o r :S leep ingBarlj已匸 i二 oleep 1 ngB arJj 已 nS Ieep incrEarlj已匸 i二S leep ingBarlj已匸 u n)3 leep ingBartier c : 103 :SleepingBartoerc: 103 :S leep ingBartier . c : 103 :error:error:error:巳匸匸匸:fur each funct.ion it. appears irL:isynt

13、sm error bef or e rp2 i t s rp stray 1 1 in progriziintnissing t.ertuzlnat 1 ng fp ctiaracterinissing terrninat.ing pr cliaracterthere 1 undec laired (first use in this f unct ierror: 已rror:error:syntax error before arerr stray 11 in prugrnrnis:=3 ing terrninat ing- pr cliaract err i0702 34 j sjserv

14、er - $正确运行结果图口回因第一次运行结果如下图:申 r j070234ejsjserver:ririr7ri2:-;4E|zi :=:i:3皂厂工厂戶亡 -Su厂! -Lrthread -n ?: LeepinaBarber m l皂皂口ingBairJ皂亡厂:r i 0 O 2 3 4 0 i s i s e rve r - $. / S 1 e e p i ngB arb e r*+*+ * *+*+-*-*-*-*-+*-+-*-+-*Enterd; Numtoeu 1 customer coincs , -zind a its 匕 1 chairThere are 1 cus匸口血己!: un 匸 11己 chairThe custurners 1 lucat.ion are: 1 u u u u古古古古古古古古古古古古古古古古古古古古古古古古古古古古古古古古古古ft古古古古古=古古古古古诜古古古古E nt ered:rj unib er 2 c us t utne 匸 c uine s, and s its at 2 c ha i r There are 2 custuine

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号