欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    睡眠理发师课程设计含有源代码Word格式文档下载.docx

    • 资源ID:18158537       资源大小:92.29KB        全文页数:14页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    睡眠理发师课程设计含有源代码Word格式文档下载.docx

    1、如果有一顾客进入理发店发现理发师在睡觉,则把他叫醒,写一个程序协调理发师和顾客之间的关系。通过研究Linux的线程机制和信号量实现睡眠理发师问题(Sleeping-Barber Problem)的并发控制,用多线程同步方法解决睡眠理发师问题(Sleeping-Barber Problem)。 要求1、 每个顾客进入理发室后,即时显示“Entered” 及其线程标识,还同时显示理发室共有几名顾客及其所坐的位置。2、至少有10个顾客,每人理发至少3秒钟。3、在完成电子设计后,要求写一份详细的设计报告。工作量编写代码不少于200行;程设计说明书不少于15页。划第一周:整体分析,查阅资料;第二周:总结

    2、出大概设计思路;第三周:着手实现,写好相应的代码;第四周:系统调试,完善系统程序。考资料计算机操作系统教材软件工程C 使用手册指导教师签字系主任签字 2014年12月 23 日 学生姓名: 方韬 学号: 2012303231 专业班级: 电子仪器12-2 课程设计题目: 睡眠理发师问题 指导教师评语:成绩: 年 月 日安徽理工大学课程设计(论文)成绩评定表一.课程设计要求有一个理发师,一把理发椅和n把提供给等候理发的顾客座的椅子。如果没有顾客,则理发师便在理发椅子上睡觉;当第一个顾客到来时,必须唤醒该理发师进行理发;如果理发师正在理发时又有顾客到来,则如果有空椅子可坐,他就坐下来等待,如果没有

    3、空椅子,他就离开理发店。为理发师和顾客各编一段程序描述他们的行为,要求不能带有竞争条件,试用P、V操作实现。二.课程设计目的通过本次课程设计,能深入彻底的弄清楚睡眠理发师问题,能够举一反三,遇到同样的问题能够很快解决。通过自己的实际操作,认真分析,理解进程,线程,信号量之间的关系和他们的实现过程,掌握一些基本的系统调用的用法及其所实现的功能。用C+来实现睡眠理发师的课程设计,达到复习C+相关知识的目的。三.设计思想说明此题可看作是n个生产者和1个消费者问题。顾客作为生产者,每到来一个就使计数器count增加1,以便让理发师理发(相当于消费)至最后一个顾客(相当于产品)。并且,第1个到来的顾客应

    4、负责唤醒理发师;如果不是第1个到达的顾客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计数器count获得)。主要有以下一些函数来实现整个问题的实现过程:(1)用随机函数random()来产生进入理发店的顾客。(2)定义理发师的理发函数cuthair()用来实现理发操作。(3)定义顾客被理发的函数gethaircut()用来实现顾客被理发的操作。(4)用顾客线程customer实现对顾客行为的控制。(5)用理发师线程barber实现对理发师行为的控制。(6)定义主函数main实现对两个线程的控制和执行操作。四.课程设计内容4.1头文件声明#include stdafx.hwindo

    5、ws.hiostream.hmath.h4.2定义各种变量int long 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

    6、Mutex =:CreateMutex(NULL, FALSE, Mutex);HANDLE barbers =:CreateSemaphore(NULL, 1,1, barbersHANDLE customers =:CreateSemaphore(NULL,0,3,customers4.4相关函数及线程的定义定义随机函数int random()来产生顾客,并使两个顾客间的时间少于15秒定义理发师的理发函数void cuthair(),用时15秒定义顾客被理发的函数void gethaircut()定义顾客线程DWORD WINAPI customer(LPVOID pParm2)定义理发师

    7、线程DWORD WINAPI barber(LPVOID pParm1)定义主函数实现线程的操作int main(int argc, char* argv)五.数据结构说明本程序用到了数据结构中的队列,理发的顾客由随机函数产生,顾客遵从先到先理发的原则,但队列的长度限制为输入的理发店中的椅子的个数,当理发店的椅子没有空位的时候,到来的顾客主动退出加入队列。理发师对队列中的顾客进行先到先服务的原则理发。六.程序用到的系统调用(API)(1)CreateThread():创建线程(2)CreateMutex():找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体,用来同步。如果一个线

    8、程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。CreateMutex()函数可用来创建一个有名或无名的互斥量对象(3)CreateSemaphore():CreateSemaphore() 是系统提供的API,包含在Windows.h 中,应用在同步的处理中。作用是创建一个新的信号机,执行成功,返回信号机对象的句柄;零表示出错。一旦不再需要,一定记住用CloseHandle关闭信号机的句柄。它的所有句柄都关闭以后,对象自己也会删除。一旦值大于零,信号机就会触发(发出信号)。Semaphore是一个同步问题机制,不论是Event或Mutex,其他Process

    9、在执WaitForSingleObject时,就看当时的物件是Signal或UnSignal而决定是否等待,而Semaphore也相同,但是它要变成Signal /UnSignal的状态,却有些不同,它是提供一个计数值,它允许在这个计数值之内,任何执行到WaitForSingleObject的Thread都不会停下来,而且每执行WaitForSingleObject一次,计数值就减一,当计数值变成0时,该Semaphore才会处於UnSignal的状态,而某个Thread ReleaseSemaphore时,便会将计数值增加,以便其他的Thread或本身可得Signal的讯号,而使WaitFo

    10、rSingleObject停止等待。(4)ReleaseSemaphore():ReleaseSemaphore()函数的作用是增加信号机的计数。如果成功,就调用信号机上的一个等待函数来减少它的计数。(5)WaitForSingleObject():函数用来检测hHandle事件的信号状态,在某一线程中调用该函数时,线程暂时挂起,如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。参数dwMilliseconds有两个具有特殊意义的

    11、值:0和INFINITE。若为0,则该函数立即返回;若为INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态时为止。(6)ResumeThread():线程恢复函数,使用该函数能激活线程的运行,使CPU分配资源让线程恢复运行。(7)ReleaseMutex():释放由线程拥有的一个互斥体(8)Sleep():睡眠等待七.程序总体算法流程图八.程序运行 (1)键入店中的椅子数 (2)键入椅子数后询问是否接待顾客 (3)开始接待顾客,第一个顾客到来 (4)依次有顾客到来 (5)还有顾客依次到来九.源代码 /等待理发的顾客人数int chairs; /店中椅子的总数目 /

    12、开门 /关门 /顾客的序号 /已经理完发的顾客人数(无符号整数32位) /用来实现进程的互斥 /定义信号量来进行线程间的同步int random()/定义随机函数来产生顾客,并使两个顾客间的时间少于15秒 return (rand()*15000)/RAND_MAX;void cuthair()/理发师的理发函数,用时15秒 :Sleep (15000); cout理发结束 !endl;void gethaircut()/ 顾客被理发的函数Sleep (15001); /顾客被理发的函数,为了和理发师之间有所区别,比理发师理发时间长1毫秒第finish个顾客理发完毕,离开 DWORD WINA

    13、PI customer(LPVOID pParm2)/ 顾客线程WaitForSingleObject(Mutex ,INFINITE); /P(mutex)来进行互斥操作 count+; /来的是第几个顾客顾客敲门!第 count 个顾客到来 if (waitingchairs) /如果有空椅子 if (waiting!=0) cout现在有waiting 个人在等待理发 else无人在等待理发 /输出有多少人在等待 waiting+; cout剩余chairs-waiting+1chairs;店中有chairs把椅子 /设置椅子数目是否开始接待顾客?Y/N /是否开门营业open_door

    14、; while (open_door!=Y)endl HANDLE hThread1; HANDLE hThread2; hThread2=:CreateThread (NULL,0,barber,NULL,0,NULL); /产生一个理发师进程 while (open_door=ywhile(close_door! Sleep(random();/函数实现顾客随机到来 hThread1=:CreateThread(NULL,0,customer,NULL,a,NULL);正在营业,请进! if (finish=8 & waiting=0) /如果完成数超过8并且没有人等待已经为个顾客理发了,

    15、是否停止营业? /提示是否关门close_door; return close_door;if (close_door=) 暂停营业!欢迎下次光临!十.总结经过这长达几周的不断机房实验,终于成功完成了此次的数据库课程设计。课程设计虽然结束了,但在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程“千里之行

    16、始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我们今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础在这次设计过程中,我们小组成员之间分工明确,协调一致的工作。此次课程设计充分体现出小组的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。当然在这过程中,我们也不可避免的遇到了困难。幸亏有同学和实验老师对我们的帮助。在此向那些为他们说一声谢谢。参考文献1庞丽萍 阳富民.计算机操作系统(第四版)北京:人民邮电出版社,20062Robert Love编著.Linux内核设计与实现.北京:机械工业出版社,20063李善平著.Linux内核指导.杭州:浙江大学出版社,2002


    注意事项

    本文(睡眠理发师课程设计含有源代码Word格式文档下载.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开