睡眠理发师课程设计(含有源代码)(共15页).doc
《睡眠理发师课程设计(含有源代码)(共15页).doc》由会员分享,可在线阅读,更多相关《睡眠理发师课程设计(含有源代码)(共15页).doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上课程设计说明书(操作系统)题目: 睡眠理发师问题 院 系:计算机科学与工程专业班级:电子仪器12-2班 学 号: 学生姓名: 方 韬 指导教师: 王军号 2014 年 12 月 23 日 专心-专注-专业安徽理工大学课程设计(论文)任务书 计算机科学与工程 学院 学 号学生姓名方韬专业(班级)电子仪器12-2设计题目睡眠理发师问题设计技术参数考虑一个理发店,只有一个理发师,只有n张可供顾客等待理发的椅子,如果没有顾客,则理发师睡觉;如果有一顾客进入理发店发现理发师在睡觉,则把他叫醒,写一个程序协调理发师和顾客之间的关系。通过研究Linux的线程机制和信号量实现睡眠理发
2、师问题(Sleeping-Barber Problem)的并发控制,用多线程同步方法解决睡眠理发师问题(Sleeping-Barber Problem)。 设计要求1、 每个顾客进入理发室后,即时显示“Entered” 及其线程标识,还同时显示理发室共有几名顾客及其所坐的位置。2、至少有10个顾客,每人理发至少3秒钟。3、在完成电子设计后,要求写一份详细的设计报告。工作量编写代码不少于200行;程设计说明书不少于15页。工作计划第一周:整体分析,查阅资料;第二周:总结出大概设计思路;第三周:着手实现,写好相应的代码;第四周:系统调试,完善系统程序。参考资料计算机操作系统教材软件工程C 使用手册
3、指导教师签字系主任签字 2014年12月 23 日 学生姓名: 方韬 学号: 专业班级: 电子仪器12-2 课程设计题目: 睡眠理发师问题 指导教师评语:成绩: 指导教师: 年 月 日安徽理工大学课程设计(论文)成绩评定表目 录 一.课程设计要求有一个理发师,一把理发椅和n把提供给等候理发的顾客座的椅子。如果没有顾客,则理发师便在理发椅子上睡觉;当第一个顾客到来时,必须唤醒该理发师进行理发;如果理发师正在理发时又有顾客到来,则如果有空椅子可坐,他就坐下来等待,如果没有空椅子,他就离开理发店。为理发师和顾客各编一段程序描述他们的行为,要求不能带有竞争条件,试用P、V操作实现。二.课程设计目的通过
4、本次课程设计,能深入彻底的弄清楚睡眠理发师问题,能够举一反三,遇到同样的问题能够很快解决。通过自己的实际操作,认真分析,理解进程,线程,信号量之间的关系和他们的实现过程,掌握一些基本的系统调用的用法及其所实现的功能。用C+来实现睡眠理发师的课程设计,达到复习C+相关知识的目的。三.设计思想说明此题可看作是n个生产者和1个消费者问题。顾客作为生产者,每到来一个就使计数器count增加1,以便让理发师理发(相当于消费)至最后一个顾客(相当于产品)。并且,第1个到来的顾客应负责唤醒理发师;如果不是第1个到达的顾客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计数器count获得)。主要有
5、以下一些函数来实现整个问题的实现过程:(1)用随机函数random()来产生进入理发店的顾客。(2)定义理发师的理发函数cuthair()用来实现理发操作。(3)定义顾客被理发的函数gethaircut()用来实现顾客被理发的操作。(4)用顾客线程customer实现对顾客行为的控制。(5)用理发师线程barber实现对理发师行为的控制。(6)定义主函数main实现对两个线程的控制和执行操作。四.课程设计内容4.1头文件声明#include stdafx.h#include windows.h#include iostream.h#include math.h4.2定义各种变量int long
6、 waiting(0); int chairs; char open_door; char close_door; int count(0); int finish(0); 4.3信号量的定义DWORD a;% 互斥信号量:mutex 用来互斥对临界变量count的访问计数信号量 customers用来记录等候的顾客数据,barbers用来记录等待的理发师数,这里barbers只有两种取值,要不是0要不是1临界变量:count由理发师进程和顾客进程共同访问,用来记录在椅子上等着的顾客数 N 椅子数,为最多等候的顾客数HANDLE Mutex =:CreateMutex(NULL, FALSE,
7、 Mutex); HANDLE barbers =:CreateSemaphore(NULL, 1,1, barbers); HANDLE customers =:CreateSemaphore(NULL,0,3,customers);4.4相关函数及线程的定义定义随机函数int random()来产生顾客,并使两个顾客间的时间少于15秒定义理发师的理发函数void cuthair(),用时15秒定义顾客被理发的函数void gethaircut()定义顾客线程DWORD WINAPI customer(LPVOID pParm2)定义理发师线程DWORD WINAPI barber(LPVO
8、ID pParm1)定义主函数实现线程的操作int main(int argc, char* argv)五.数据结构说明本程序用到了数据结构中的队列,理发的顾客由随机函数产生,顾客遵从先到先理发的原则,但队列的长度限制为输入的理发店中的椅子的个数,当理发店的椅子没有空位的时候,到来的顾客主动退出加入队列。理发师对队列中的顾客进行先到先服务的原则理发。六.程序用到的系统调用(API)(1)CreateThread():创建线程(2)CreateMutex():找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体,用来同步。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起
9、,直到第一个线程释放该互斥体。CreateMutex()函数可用来创建一个有名或无名的互斥量对象(3)CreateSemaphore():CreateSemaphore() 是系统提供的API,包含在Windows.h 中,应用在同步的处理中。作用是创建一个新的信号机,执行成功,返回信号机对象的句柄;零表示出错。一旦不再需要,一定记住用CloseHandle关闭信号机的句柄。它的所有句柄都关闭以后,对象自己也会删除。一旦值大于零,信号机就会触发(发出信号)。Semaphore是一个同步问题机制,不论是Event或Mutex,其他Process在执WaitForSingleObject时,就看当
10、时的物件是Signal或UnSignal而决定是否等待,而Semaphore也相同,但是它要变成Signal /UnSignal的状态,却有些不同,它是提供一个计数值,它允许在这个计数值之内,任何执行到WaitForSingleObject的Thread都不会停下来,而且每执行WaitForSingleObject一次,计数值就减一,当计数值变成0时,该Semaphore才会处於UnSignal的状态,而某个Thread ReleaseSemaphore时,便会将计数值增加,以便其他的Thread或本身可得Signal的讯号,而使WaitForSingleObject停止等待。 (4)Rele
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 睡眠 理发师 课程设计 含有 源代码 15
限制150内