睡眠理发师课程设计报告70.docVIP

  • 59
  • 0
  • 约7.34千字
  • 约 12页
  • 2018-04-28 发布于贵州
  • 举报
睡眠理发师课程设计报告70

成绩 《操作系统》课程设计报告 专业: 计算机科学与技术 班级: 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

文档评论(0)

1亿VIP精品文档

相关文档