欢迎来到天天文库
浏览记录
ID:48716168
大小:258.50 KB
页数:54页
时间:2020-01-20
《04第四章 互斥同步与通讯(2)1.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、4.3.6会合(Rendezvous)背景80年代,Ada,InitiatedbyDOD;Ada95,(Object-oriented)会合:两个并发执行流汇集到一处并发执行流调用接受均发生,握手,同步。P1:会合引入背景—分布系统共享变量(被动)Semaphores;……P(S)CR2V(S)……P2:共享变量与访问进程在同一存储区,不适合分布环境。PV操作问题:P(S)CR1V(S)P1:会合引入背景—分布系统共享变量(被动)Semaphores;……P(S)CR2V(S)……P2:共享变量与访问进程在同一存储区,不适合分布环境。PV操作问题:P(S)CR1V(S)站点1站点2会合引入
2、背景—分布系统共享变量CR1CR2管程(被动)P1:......P2:......管程与调用进程在同一存储区,不适合分布环境。管程问题:会合引入背景—分布系统共享变量CR1CR2管程(被动)P1:......P2:......管程与调用进程在同一存储区,不适合分布环境。管程问题:站点1站点2会合图示任务task任务task任务task调用语句调用语句接受语句选择语句被调用者代调用者执行调用代码会合图示被调用任务入口1:accept入口2:acceptselect.........PCBPCB......PCBPCB...…调用语句调用语句调用任务入口FIFO队列Ada同步语句1.调用语句<
3、任务名称>.<入口名称>[<实参表>]2.接受语句accept<入口名称>[<形参表>][do<语句序列>end<入口名称>]Accept语句有调用者等待选取第一个会合开始调用者等待有in参数取in参数有语句序列执行之有out参数送out参数会合结束调用者继续会合期TFTFTFTF例子--单一资源管理tasksingle_resourceisentryacquire;entryreturn;endsingle_resource;taskbodysingle_resourceisbeginloopacceptacquire;acceptreturn;endloopendsingle_reso
4、urce;single_resource.acquire;使用single_resource.return;Ada同步语句(cont.)3.选择语句select[when<布尔表达式>=>]<接受语句>[<语句序列>]{or[when<布尔表达式>=>]<接受语句>[<语句序列>]}[else<语句序列>]endselectSelect语句语义计算所有布尔表达式,为真者对应入口标记开放;If无开放的<接受语句>ThenIf有ELSE部分Then执行之Else异常;break;If无被调用的开放的<接受语句>ThenIf有ELSE部分Then执行之;break;Else等待;任取一开放的被调
5、用的接受语句会合开始,调用者等待;If有in参数Then取in参数;If有<语句子列>Then执行之;会合期If有out参数Then送out参数;会合结束,调用者继续;Ifselect语句有语句序列Then执行之。4.3.6.1会合的描述(Cont.)select语句流程计算所有布尔表达式为’真’者对应标记开放有开放的有else部分F有被调用的开放的T有else部分F等待F会合开始,调用者等待有in参数有语句序列F取in参数T执行语句序列T有out参数F送out参数Telse部分T建立异常条件Felse部分TF会合结束,调用者继续任取一开放且
6、被调用的T4.3.6.2会合例子--客栈问题...explorersbakeryhunter活动:(1)接受猎物(2)接受面包(3)做三明治(4)给探险家限制:一份猎物一份面包一份三明治一位客人master客栈客栈问题explorer:loop探险进客栈取三明治出客栈吃三明治endloophunter:loop狩猎进客栈送猎物出客栈endloopbakery:loop做面包进客栈送面包出客栈endloop入口入口入口客栈问题procedureAdalodgeistasktypeexplorer;taskhunter;taskbakery;taskmasterisentryd
7、eliverbread;//面包师送面包entrydelivermeat;//狩猎者送猎物entrylodge;//探险家取三明治endmaster;客栈问题taskbodyexplorerisvictuals:food;beginloopexplore;master.lodge(victuals);//入客栈取三明治eat(victuals)endloopendexplorer;客栈问题taskbodyhunteris
此文档下载收益归作者所有