04第四章 互斥同步与通讯(2)156618.ppt

04第四章 互斥同步与通讯(2)156618.ppt

ID:48805398

大小:261.50 KB

页数:51页

时间:2020-01-26

04第四章 互斥同步与通讯(2)156618.ppt_第1页
04第四章 互斥同步与通讯(2)156618.ppt_第2页
04第四章 互斥同步与通讯(2)156618.ppt_第3页
04第四章 互斥同步与通讯(2)156618.ppt_第4页
04第四章 互斥同步与通讯(2)156618.ppt_第5页
资源描述:

《04第四章 互斥同步与通讯(2)156618.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、4.3.6会合(Rendezvous)背景80年代,Ada,InitiatedbyDOD;Ada95,(Object-oriented)会合:两个并发执行流汇集到一处并发执行流调用接受均发生,握手,同步。CR1P1:会合引入背景—分布系统共享变量(被动)……CR2……P2:共享变量与访问进程在同一存储区,不适合分布环境。PV操作问题:会合引入背景—分布系统共享变量CR1CR2管程(被动)P1:......P2:......管程与调用进程在同一存储区,不适合分布环境。管程问题:会合图示任务task任务task任务task调用语句调用

2、语句接受语句选择语句被调用者代调用者执行调用代码会合图示被调用任务入口1:accept入口2:acceptselect.........PCBPCB......PCBPCB...…调用语句调用语句调用任务入口FIFO队列Ada同步语句1.调用语句<任务名称>.<入口名称>[<实参表>]2.接受语句accept<入口名称>[<形参表>][do<语句序列>end<入口名称>]Accept语句If无调用者Then等待;选取第一个调用者会合开始,调用者等待;If有in参数Then取in参数;If有<语句序列>Then执行之;If有out参

3、数Then送out参数;会合结束,调用者继续。会合期例子--单一资源管理tasksingle_resourceisentryacquire;entryreturn;endsingle_resource;taskbodysingle_resourceisbeginloopacceptacquire;acceptreturn;endloopendsingle_resource;single_resource.acquire;使用single_resource.return;Ada同步语句(cont.)3.选择语句select[when

4、<布尔表达式>=>]<接受语句>[<语句序列>]{or[when<布尔表达式>=>]<接受语句>[<语句序列>]}[else<语句序列>]endselectSelect语句语义计算所有布尔表达式,为真者对应入口标记开放;If无开放的<接受语句>ThenIf有ELSE部分Then执行之Else异常;break;If无被调用的开放的<接受语句>ThenIf有ELSE部分Then执行之;break;Else等待;任取一开放的被调用的接受语句会合开始,调用者等待;If有in参数Then取in参数;If有<语句子列>Then执行之;会合期I

5、f有out参数Then送out参数;会合结束,调用者继续;Ifselect语句有语句序列Then执行之。4.3.6.2会合例子--客栈问题...explorersbakeryhunter活动:(1)接受猎物(2)接受面包(3)做三明治(4)给探险家限制:一份猎物一份面包一份三明治一位客人master客栈客栈问题explorer:loop探险进客栈取三明治出客栈吃三明治endloophunter:loop狩猎进客栈送猎物出客栈endloopbakery:loop做面包进客栈送面包出客栈endloop入口入口入口客栈问题procedu

6、reAdalodgeistasktypeexplorer;taskhunter;taskbakery;taskmasterisentrydeliverbread;//面包师送面包entrydelivermeat;//狩猎者送猎物entrylodge;//探险家取三明治endmaster;客栈问题taskbodyexplorerisvictuals:food;beginloopexplore;master.lodge(victuals);//入客栈取三明治eat(victuals)endloopendexplorer;客栈问题tas

7、kbodyhunteriswalrus:food;beginloophunt(walrus);master.delivermeat(walrus)endloopendhunter;taskbodybakeryisrolls:food;beginloopbake(rolls);master.deliverbread(rolls)endloopendbakery;客栈问题客栈问题taskbodymasterisbread,meat,sandwich:food;proceduremakesandwichisbegincook(meat)

8、;sandwich:=bread+meat;bread:=0;meat:=0;endmakesandwich;客栈问题beginbread:=0;meat:=0;sandwich:=0;loopselectwhenbread=0=>acceptde

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。