理发师问题课设说明书.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
理发师问题课设说明书

目 录 前 言 2 摘 要 3 正 文 4 1. 设计思想 4 2. 算法用到的主要数据结构(采用类c语言定义) 6 3. 相关的各模块的伪码算法 6 4. 调试分析 8 5. 测试结果 9 总 结 11 参考文献 12 致 谢 13 附件Ⅰ 部分源程序代码 14 前 言 在早期的操作系统中一次只允许一个程序。这种执行方式使得程序在执行期间对系统有完全的控制权,每个程序能访问系统中的所有资源。随着多道批处理系统和分时系统的出现,程序在系统中的运行不再是独立的,作为资源分配和独立运行的基本单位是进程,而且操作系统所具有的基本特征也是基于进程而形成的,故应从进程的观点来研究操作系统。随着操作系统的进一步发展,许多现代的操作系统为了提高并发力度和降低兵法开销,又引进了线程的概念。 由于进程具有动态性和异步性,以及各个进程对资源的共享和为完成一向共同的任务需要彼此合作等原因,产生了进程间的相互制约关系。如果对进程的活动不加约束,就会使系统出现混乱,如多个进程的输出结果混在一起,数据处理的结果不一,系统中某些空闲的资源无法得到利用等问题。为了保证系统中所有进程都能正常活动,是程序的执行具有可再现性,就必须提供进程同步机制。 操作系统中实现进程同步和互斥的机制都称为同步机制,通常采用某个标志实体来实现同步,如信号量机制,一个控制这些同步机构的程序被称为同步原语。信号量被作为一种控制进程互斥和同步的物理变量,对信号量的操作,采用了一对严格设计的程序原语称为P,V原语。信号量被定义为整形或记录型变量,当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,表示已无可用资源,其绝对值表示等待使用该资源的进程个数,即在该信号量队列上排队的进程数即每一个信号量有一个等待队列。 理发师问题是一个经典同步问题,本次课设采用信号量机制P,V原语描述,用C++实现算法。 摘 要 理发师问题是经典进程同步问题,即一个理发店里有间配n个椅子的等候室和一个有理发椅的理发室,如果没有顾客,理发师就去睡觉,如果有顾客来时所有的椅子上都有人,顾客离去,如果等候室有空闲的椅子,顾客就会坐在其中一个椅子上,如果理发师在睡觉顾客会摇醒他。本次设计采用信号量机制P、V原语来描述问题,并用C++编程实现P、V操作。通过该题的设计过程,可以掌握理发师问题的原理,软件开发方法并解决实际问题的能力,以及理解进程同步概念学习如何分配资源。 关键字:理发师问题,进程同步,信号量机制 正 文 设计思想 1.1 在此问题中可利用三个信号量和一个控制量来协调理发师,理发椅和顾客之间的活动,即:。 (1),信号量customer用来记录正在等待理发的顾客数,并用作阻塞俩法师进 程,初值为0; (2),信号量barbers记录正在等候理发的顾客数,初值为0;并用作阻塞顾客进程。 (3),信号量waitting用来记录等候理发的顾客数,初值为0。 (4),信号量mutex用于互斥初值为1; 1.2 此问题可抽象为n个生产者和1个消费者问题,顾客作为生产者每到来一个就使计数器count加1,以便让理发师理发(相当于消费)至最后一个顾客(产品),并且第一个到来的顾客负责唤醒理发师,而后到来的顾客在有空椅子的情况下坐下等待,否则离开。 在设计过程中用随机函数来产生进入理发店的顾客,定义理发师的理发函数用来实现理发操作,定义顾客被理发的函数来定义顾客被理发的操作,用顾客线程实现对顾客行为的控制,用理发师线程实现对理发师行为的控制。 定义主函数实现对两个线程的控制和执行操作。 1.3算法流程图 算法用到的主要数据结构(采用类c语言定义) 本程序用到了数据结构中的队列,理发的顾客由随机函数产生,顾客遵从先到先立法的原则,但队列的长度限制为理发店中椅子的个数,当理发店中没有空闲的椅子时,到来的顾客主动退出加入队列,理发师对队列中的顾客以先到先服务的原则理发。 while(true) { ::WaitForSingleObject(customers,INFINITE); //p(customers),等待顾客 ::WaitForSingleObject(Mutex,INFINITE); //等待互斥量 waiting--; //等待的人数减1 ::ReleaseSemaphore(barbers,1,NULL); //释放信号量 ::ResumeThread(barbers); //唤醒顾客进程 ::ReleaseMutex(Mutex);

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档