- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
睡眠理发师课程设计报告
成绩 《操作系统》课程设计报告
专业: 计算机科学与技术 班级: 08 计本(2)班 学 号 姓 名 题目名称: 理发师问题 完成日期: 2011 . 6 甘肃政法学院计算机科学学院
目 录
一.题目内容 2
二.课程设计目的 3
三.设计思想说明 3
四.系统结构的说明 3
(一)头文件声明 3
(二)定义各种变量 3
(三)信号量的定义 3
(四)相关函数及线程的定义 3
五.数据结构说明 4
六.程序用到的系统调用(API) 4
七.程序总体算法流程图 4
八.程序运行 5
九.使用说明书 7
十.程序设计总结 7
参考文献 8
附录 8
(一)代码清单 8
(二)课程设计分工表 11 睡眠理发师问题
一.题目内容
有一个理发师,一把理发椅和n把提供给等候理发的顾客座的椅子。如果没有顾客,则理发师便在理发椅子上睡觉;当第一个顾客到来时,必须唤醒该理发师进行理发;如果理发师正在理发时又有顾客到来,则如果有空椅子可坐,他就坐下来等待,如果没有空椅子,他就离开理发店。
为理发师和顾客各编一段程序描述他们的行为,要求不能带有竞争条件,试用P、V操作实现。
二.课程设计目的
通过本次课程设计,能深入彻底的弄清楚睡眠理发师问题,能够举一反三,遇到同样的问题能够很快解决。通过自己的实际操作,认真分析,理解进程,线程,信号量之间的关系和他们的实现过程,掌握一些基本的系统调用的用法及其所实现的功能。用C++来实现睡眠理发师的课程设计,达到复习C++相关知识的目的。
三.设计思想说明
此题可看作是n个生产者和1个消费者问题。
顾客作为生产者,每到来一个就使计数器count增加1,以便让理发师理发(相当于消费)至最后一个顾客(相当于产品)。并且,第1个到来的顾客应负责唤醒理发师;如果不是第1个到达的顾客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计数器count获得)。主要有以下一些函数来实现整个问题的实现过程:
(1)用随机函数random 来产生进入理发店的顾客。
(2)定义理发师的理发函数cuthair 用来实现理发操作。
(3)定义顾客被理发的函数gethaircut 用来实现顾客被理发的操作。
(4)用顾客线程customer实现对顾客行为的控制。
(5)用理发师线程barber实现对理发师行为的控制。
(6)定义主函数main实现对两个线程的控制和执行操作。
四.系统结构的说明
(一)头文件声明
#include stdafx.h
#include windows.h
#include iostream.h
#include math.h
(二)定义各种变量
int long waiting 0 ; int chairs; char open_door; char close_door; int count 0 ; int finish 0 ; (三)信号量的定义
DWORD a;% 互斥信号量:mutex 用来互斥对临界变量count的访问
计数信号量 customers用来记录等候的顾客数据,barbers用来记录等待的理发师数,这里barbers只有两种取值,要不是0要不是1
临界变量:count由理发师进程和顾客进程共同访问,用来记录在椅子上等着的顾客数 N 椅子数,为最多等候的顾客数
HANDLE Mutex ::CreateMutex NULL, FALSE, Mutex ;
HANDLE barbers ::CreateSemaphore NULL, 1,1, barbers ;
HANDLE customers ::CreateSemaphore NULL,0,3,customers ;
(四)相关函数及线程的定义
定义随机函数int random 来产生顾客,并使两个顾客间的时间少于15秒
定义理发师的理发函数void cuthair ,用时15秒
定义顾客被理发的函数void gethaircut
定义顾客线程DWORD WINAPI customer LPVOID pParm2
定义理发师线程DWORD WINAPI barber LPVOID pParm1
定义主函数实现线程的操作int main int argc, char* argv[]
五.数据结构说明
本程序用到了数据结构中的队列,理发的顾客由随机函数产生,顾客遵从先到先理发的原则,但队列的长度限制为输入的理发店中的椅子的个数,当理发店的椅子没有空位的时候,到来的顾客主动退出加入队列。理发师对队列中的顾客进行先到先服务的原则理发。
六.程序用到的系统调用(API)
(1)CreateThread():创建线程
(2)CreateMutex()找出当前系统是否已经存在指定进程的实例。如果
您可能关注的文档
最近下载
- 猪主要传染性腹泻病的流行情况与防控对策.docx
- 机电工程投标方案.docx VIP
- 人教PEP版小学英语五年级 下册(1-6单元)思维导图.pdf
- 国际金融附微课杜玉兰习题答案.docx VIP
- 2023年大连大学计算机科学与技术专业《计算机系统结构》科目期末试卷A(有答案).docx VIP
- 2023年大连大学计算机科学与技术专业《计算机网络》科目期末试卷B(有答案).docx VIP
- 知识产权法智慧树知到期末考试答案章节答案2024年同济大学.docx VIP
- 临床医学教学模式创新与课堂互动设计.pptx
- 生猪屠宰兽医卫生检验人员理论考试题库资料及答案.pdf VIP
- 天津市静海区2024-2025学年高一下学期6月学生学业能力调研试题 地理试卷含答案.docx VIP
文档评论(0)