- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六讲经典进程的同步问题(2) 本次课程主要内容经典进程的同步问题读者-写者问题进程同步管程机制经典进程的同步问题生产者消费者问题(管程)哲学家进餐问题生产者-消费者问题回顾生产者进程outn个(0,1,…,n-1)。。。。。。。。消费者进程inVar mutex,empty,full: semaphore:=1,n,0; buffer:array[0,…,n-1] of item; in,out: integer:=0,0; begin parbegin proceducer: begin repeat … producer an item nextp; … wait(empty); wait(mutex); buffer(in):=nextp; in:=(in+1) mod n; signal(mutex); signal(full); until false; end procedure wait(S) var S:semaphore; begin S.value:=S.value-1; if S.value0 then block(S.L); end procedure signal(S) var S: semaphore; begin S.value:=S.value+1; if S.value=0 then wakeup(S.L); end consumer: begin repeat wait(full); wait(mutex); nextc:=buffer(out); out:=(out+1) mod n; signal(mutex); signal(empty); consumer the item in nextc; until false; end procedure wait(S) var S:semaphore; begin S.value:=S.value-1; if S.value0 then block(S.L); end procedure signal(S) var S: semaphore; begin S.value:=S.value+1; if S.value=0 then wakeup(S.L); end 2.4 经典进程同步问题Reader进程1Writer进程文件Reader进程2…Writer进程Reader进程nVar rmutex,wmutex: semaphore:=1,1; Readcount: integer:=0;2.4.3 读者-写者问题Reader: begin repeat wait(rmutex); if readcount=0 then wait(wmutex); Readcount:=Readcount+1; signal(rmutex); perform read operation; wait(rmutex); readcount:=readcount-1; if readcount=0 then signal(wmutex); signal(rmutex); until false; procedure wait(S) var S:semaphore; begin S.value:=S.value-1; if S.value0 then block(S.L); end … procedure signal(S) var S: semaphore; begin S.value:=S.value+1; if S.value=0 then wakeup(S.L); end … procedure wait(S) var S:semaphore; begin S.value:=S.value-1; if S.value0 then block(S.L); end writer: begin repeat wait(wmutex); perform write operation; signal(wmutex); until false;end procedure signal(S) var S: semaphore; begin S.value:=S.value+1; if S.value=0 then wakeup(S.L); end 2.3.4 管程机制 虽然信号量机制是一种即方便、又有效的进程同步机制,但每个要访问临街资源的进程都需要自备同步操作wait(S)和signal(S)。这使的大量的同步操作分散在各个进程
原创力文档


文档评论(0)