没有合适的资源?快使用搜索试试~ 我知道了~
首页操作系统课程设计--多线程解决理发师问题
资源详情
资源评论
资源推荐
题目: 用多线程同步方法解决睡眠理发师问题(Sleeping-Barber Problem)
初始条件:
. 操作系统:
. 程序设计语言:语言
设有一个理发师,把椅子(另外还有一把理发椅),几把椅子可用连续存储单元。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.技术要求:
1)为每个理发师/顾客产生一个线程,设计正确的同步算法
2)每个顾客进入理发室后,即时显示“Entered” 及其线程自定义标识,还同时显示
理发室共有几名顾客及其所坐的位置。
3)至少有10个顾客,每人理发至少3秒钟。
4)多个顾客须共享操作函数代码。
2. 设计说明书内容要求:
1)设计题目与要求
总的设计思想及系统平台、语言、工具等。
)数据结构与模块说明(功能与流程图)
)给出用户名、源程序名、目标程序名和源程序及其运行结果。(要注明存
储各个程序及其运行结果的主机IP地址和目录。)
)运行结果与运行情况
(提示: (1)连续存储区可用数组实现。
(2)编译命令可用: cc -lpthread -o 目标文件名 源文件名
(3)多线程编程方法参见附件。)
1设计题目与要求
1.1 设计题目
用多线程同步方法解决睡眠理发师问题(
1.2 设计要求
1.2.1 初始条件
()操作系统:
()程序设计语言:语言
()设有一个理发师,把椅子(另外还有一把理发椅),几把椅子可用连续存储单元。
1.2.2 技术要求
()为每个理发师/顾客产生一个线程,设计正确的同步算法
(2)每个顾客进入理发室后,即时显示“Entered” 及其线程自定义标识,还同时显示理发室
共有几名顾客及其所坐的位置。
(3)至少有10个顾客,每人理发至少3秒钟。
()多个顾客须共享操作函数代码。
2 总体设计思想及开发环境与工具
2.1 总体设计思想
题目中要求描述理发师和顾客的行为,因此需要两类线程barber()和customer ()分别描述
理发师和顾客的行为。其中,理发师有活动有理发和睡觉两个事件;等待和理发二个事件。
店里有固定的椅子数,上面坐着等待的顾客,顾客在到来这个事件时,需判断有没有空闲的
椅子,理发师决定要理发或睡觉时,也要判断椅子上有没有顾客。所以,顾客和理发师之间
的关系表现为:
(1)理发师和顾客之间同步关系:当理发师睡觉时顾客近来需要唤醒理发师为其理发,
当有顾客时理发师为其理发,没有的时候理发师睡觉。
(2)理发师和顾客之间互斥关系:由于每次理发师只能为一个人理发,且可供等侯的椅
子有限只有n把,即理发师和椅子是临界资源,所以顾客之间是互斥的关系。
(3)故引入3个信号量和一个控制变量:
控制变量waiting用来记录等候理发的顾客数,初值为0;
信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0;
信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为1; ⅳ
信号量mutex用于互斥,初值为1
2.2 多线程编程原理
此次在下进行多线程编程需要用到 !"#和 !"$这两个函数。
2.2.1 创建一个线程
pthread_create用来创建一个线程,原型为:
e x t e r n i n t p t h r e a d _ c r e a t e ( ( p t h r e a d _ t * _ _ t h r e a d , _ _ c o n s t p t h r e a d _ a t t r _ t * _ _ a t t r , v o i d
*(*__start_routine) (void *), void *__arg))
第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线
程运行函数的起始地址,最后一个参数是运行函数的参数。函数thread不需要参数时,最后
一个参数设为空指针。第二个参数设为空指针时,将生成默认属性的线程。创建线程成功后
新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一行代码。
2.2.2 等待一个线程结束
pthread_join用来等待一个线程的结束,函数原型为:
extern int pthread_join __P ((pthread_t __th, void **__thread_return));
第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存
储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被
等待的线程结束为止,当函数返回时,被等待线程的资源被收回。
2.2.3 信号量
()函数%"()用来初始化一个信号量,函数原型为:
% " " " & & % " ' " " % ( " " % ! ( % !
"")*
%为指向信号量结构的一个指针;% !不为0时此信号量在进程间共享,否则只
能为当前进程的所有线程共享;)给出了信号量的初始值。
()函数%"%&%"'%用来增加信号量的值。
当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在阻塞,选择机
制同样是由线程的调度策略决定的。
()函数%"+&%"'%被用来阻塞当前线程直到信号量%的值大于,,解
除阻塞后将%的值减一,表明公共资源经使用后减少。函数%"-+&%"
'%是函数%"+()的非阻塞版本,它直接将信号量%的值减一。
2.3 伪码实现
!.; //为顾客准备的椅子数为
% 0; //用于互斥
% #%%0,;//等候理发的顾客数
% %0;//正在等候顾客的理发师数
+0,; //等候理发的顾客数
//理发师线程
)!&
1
+ &//判断有无顾客
1
+&#%%*//若无顾客(理发师睡眠
+&*//互斥
+*//等候顾客数少一个
%&*//释放临界资源
%&*//理发师去为一个顾客理发
#" *//正在理发
2
2
//顾客线程
)!#%&
1
+&*//互斥
3&+4//如果有空椅子,则等待
剩余15页未读,继续阅读
kate080801223
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2