操作系统第6讲new解读.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六讲 经典进程的同步问题(2) 2017年4月10日0时46分 本次课程主要内容 经典进程的同步问题 读者-写者问题 进程同步 管程机制 经典进程的同步问题 生产者消费者问题(管程) 哲学家进餐问题 2017年4月10日0时46分 2 2017年4月10日0时46分 3 。。。。 。。。。 生产者进程 消费者进程 n个(0,1,…,n-1) in out 生产者-消费者问题回顾 2017年4月10日0时46分 4 Var mutex,empty,full: semaphore:=1,n,0;   buffer:array[0,…,n-1] of item;   in,out: integer:=0,0;   begin    parbegin     2017年4月10日0时46分 5 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 2017年4月10日0时46分 6 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 经典进程同步问题 2017年4月10日0时46分 7 2.4.3 读者-写者问题 文件 Writer进程 Reader进程1 Reader进程2 Reader进程n … Writer进程 Var rmutex,wmutex: semaphore:=1,1;   Readcount: integer:=0; 2017年4月10日0时46分 8 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 signa

文档评论(0)

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

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

1亿VIP精品文档

相关文档