- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于信号量机制的生产者消费者问题的分析.doc
基于信号量机制的生产者消费者问题的分析 摘 要:本文研究的是操作系统中进程同步和互斥的三大经典问题之一的生产者和消费者问题,通过信号量的机制,对多种办法解决该问题中可能会出现的多种情况。 关键词:缓冲区;信号量;Java 1 信号量机制 生产者――消费者问题(Procedure――Consumer)是相互合作的进程关系的一种抽象,既包含了同步又包含了互斥。同步指的是进程之间的一种协调行为,互斥,指的是对于临界区的使用在某个时刻只允许仅被一个进程使用。 为了解决进程的同步和互斥,荷兰学着Dijkstra于1965年提出了一种卓有成效的信号量机制[1]。在长期的应用中,信号量机制经历了三个阶段的发展,⒈整型信号量⒉记录型信号量⒊“信号量集”机制。 1.1 整型信号量 定义一个整型变量S,表示资源的数目,仅能通过P(Wait(S),申请资源),V(Signal(S),释放资源)操作来访问。具体定义如下: P(S):①将信号量S的值减1,即S S-1; ②如果S 0,该进程置为等待状态,排入等待队列。 V(S):①将信号量S的值加1,即S S+1; ②如果S 0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。 1.2 记录型信号量 整型信号量存在一个缺点,当S 0时,就要不断地去测试。进程就会处于“忙等”状态,不符合“让权等待”。记录型信号量解决了多个进行访问同意临界资源的情况。其数据结构如下: typedef semaphore record count: integer; queue:list of queue; end 其中,count为信号量的个数。queue为阻塞队列的进程数目。 1.3 AND信号量 如果出现多个临界资源时,就需要用AND信号量,指的是一个进程一次性地申请运行所需要的所有的资源,使用完后一次性地释放资源。在这里需要设置两个互斥的信号量实现对两个资源的互斥使用,Dmutex,Emutex。 即:Swait(S1,S2,S3,……Sn),Ssignal(S1,S2,S3,……Sn)。 1.4 信号量集 在该种信号量机制中,是在AND信号量机制的基础上,增加了一个下限,当资源数量低于某一下限时即不予以分配资源。 Swait(S1,t1,d1,……S2,tn,dn) Ssignal(S1,d1,……,Sn,dn) 其中,S为信号量,d为需求值,t为下限值。 2 Procedure――Consumer 生产者――消费者问题涉及到生产者进程和消费者进程。可以把该过程理解为生产者生产产品,消费者消费这些产品。在两者之间设置了存放产品的缓冲池。生产者把产品放入一个缓冲区,消费者从一个缓冲区取走产品去消费。这个问题中,需要注意:⒈生产者和消费者必须是互斥的,即当生产者往缓冲区投放产品时,消费者不能去取,其他生产者也不能往里面放数据。⒉生产者和消费者是同步的,即生产者不能向满缓冲区投放产品,消费者也不能在空缓冲区取数据。Procedure流程图如下: 2.1 一个生产者一个消费者,公用一个缓冲区 这个问题中不存在互斥的问题,因此只需定义两个同步信号量,empty与full。Empty表示缓冲区是否为空,初值为1,full表示缓冲区是否为满,初值为0。 2.2 一个生产者,一个消费者,公用n个环形缓冲区 这种情况下,生产者可以把产品放入其中一个缓冲区当中,只用当缓冲区放入产品,消费者才可以去消费,但是,这些缓冲区是可以循环使用,为了实现循环使用,我们采用了指针,要求生产者是按照一定的顺序把生产的产品放入到缓冲区链中。 定义两个同步信号量empty和full,Empty表示缓冲区是否为空,初值为n,full表示的是缓冲区是否为满,初值为0。定义两个指针生产者和消费者使用的指针,为input和iget,指向下一个能够使用的缓冲区。 2.3 n个生产者,n个消费者,公用n个环形缓冲 生产者和消费者之间的是同步的,各个生产者之间,各个消费者之间是互斥的,对缓冲区的访问应该是互斥的,为了解决这个问题,需要利记录型信号量。定义三个变量,S为互斥信号量,初始化为1,n为资源信号量,表示已经存放产品的的缓冲区,初始化为0,e为资源信号量,表示空缓冲区的个数。 3 总结 ⑴进程在申请资源的时候,如果资源信号量和互斥信号量同时存在,应该先申请资源信号量,后申请互斥信号量(表示查看下该缓冲区是否其他进程在使用)。 ⑵同一进程中的P、V操作必须配对出现,同一个信号量的P、V操作可以不同时出现,但是可以在同一进程中嵌套使用。 ⑶申请资源必须在释放资源之前,即先需要Wait,再Signal。 [参考文献] [1]严兵.生产者消费者问题的分析和实现[J].西华大学学报(自然科学版),2006,25(2):13-15. [2]汤晓丹,梁红兵,哲凤
您可能关注的文档
最近下载
- 【英国皇家建筑师协会(RIBA)】2024年人工智能在建筑实践中的应用研究报告-RIBA AI Report 2024.docx VIP
- 2025年NSCA-CPT-II高级国际注册体能训练师考试备考题库及答案解析.docx VIP
- 2025年NSCA-CPT国际注册体能训练师考试备考题库及答案解析.docx VIP
- 三级进度计划.docx VIP
- 路基路面课程设计--路基与路面工程.doc VIP
- 中华武术智慧树知到期末考试答案章节答案2024年宁波大学.docx VIP
- 2025危险化学品企业安全生产标准化通用规范.pdf VIP
- 铃儿响叮当(Jingle Bells)钢琴谱五线谱 完整版原版.pdf
- 高考语文阅读理解《千里江山图》含答案.docx VIP
- 媒体文阅读专项-【中职专用】2024年中职高考语文二轮复习专项突破(四川适用)解析版.docx VIP
原创力文档


文档评论(0)