- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 进程同步与通信、进程死锁 4.1并发执行实现 一个程序内部常常存在并发成份,即存在着可并发执行的程序段或语句。 例: read(a); 从设备1上输入信息a read(b); 从设备2上输入信息b c:=a+b; 计算C write(C); 从设备上输出信息C 并发成分与其它语句之间存在着相互制约的关系,为描述这些优先关系,定义一个描述工具:优先图。 4.1.1并发编程方法 例1: Parbegin S1; S2; Parend; S3; S4; S1; Parbegin S3; Begin S2; S4; Parbegin S5; S6; Parend; End; Parend; S7; 问题:在什么条件下程序中的两个语句能并发执行?对任意语句Si定义两个操作: R(Si):Si执行时进行读访问操作的变量 W(Si):Si执行时进行写访问操作的变量 例如:R(read(a))={}; W(read(a))={a}; R(c:=a+b)={a,b}; W(c:=a+b)={c}; 程序中相邻语句S1、S2如果同时满足以下三个条件,则可并发并结果正确: 1.R(S1) ∩W(S2)={ } 2.W(S1)∩R(S2)={ } 3.W(S1)∩W(S2)={ } 说明:Fork指令将原来顺序执行的活动分为两个并发执行的活动。这两个并发活动必须在特定的位置上合并,先执行到Join指令的将被停止,等到另一个并发活动也执行到Join指令时,程序才重新开始顺序执行Join指令后续的语句。为了动态实现合并,可以设想Join指令完成以下动作: count:=count-1; If count≠ 0 then quit; 其中,quit代表停止某个并发活动的操作。 为保证正确性,该语句必须作为原语操作。 例1:read(a); read(b); c:=a+b; write(c); S1; count1:=2; count2:=2; fork L1; S2; S4; fork L2; S5; goto L3; L1: S3; L2: join count1; S6; L3: join count2; S7; 补充作业:分别用并发语句和Fork/Join将下图转换成一个程序。 4.2进程的同步与互斥 进程间存在的制约关系分为两类: 同步关系(直接制约关系):为完成同一任务的伙伴进程间,因协调工作次序而等待所产生的制约关系。 互斥关系(间接制约关系):进程间因相互竞争使用独占型资源(互斥资源)所产生的制约关系。 4.2.1 临界段问题 例1:进程P1、P2共享打印机资源。 例2:有限缓冲区的生产者/消费者问题。生产者产生产品放入缓冲区,消费者从缓冲区取出产品。 生产者: begin 生产一个产品nextp; new(p); p.inst:=nextp; p.next:=first; first:=p; end; 给出临界段问题的描述: 临界资源(CR):一次仅允许一个进程使用的资源。 临界段(CS):各进程必须互斥执行的程序段,该程序段实施对临界资源的操作。 ※实现临界段互斥的软件算法: 考虑两个进程P0、P1之间的互斥问题,用Pi表示其中一个进程,Pj表示另一个进程。软件算法是指在临界段的入口码和出口码设计相应代码,实现互斥执行临界段。 算法1:设置共享整型变量turn,取值为0或1。若turn=i,则进程Pi获准进入临界段。 进程Pi: while turn≠ i do skip; cs; turn:=j; 问题:若某时刻turn=0,且P0不在临界段内,则P1无法进入CS。 ※算法2:将变量turn替换成数组flag[i],元素初值为false。如果flag[i]=true,表示进程P[i]正在执行其临界段。 进程Pi: while flag[ j ] do skip; flag[i]:=true;
您可能关注的文档
最近下载
- Unit 4 Lesson 1 What's So Funny 课件-2024-2025学年高中英语北师大版(2019)选择性必修第二册.pptx VIP
- 光伏发电工程概算定额解读.docx
- 任务规划与通讯链路资料.ppt VIP
- 药房核心制度流程试题.doc VIP
- 标准图集-20CS03-1 一体化预制泵站选用与安装(一).pdf VIP
- 全国教育科学“十二五”规划课题《小学生良好行为习惯的养成教育研究》结题报告.pdf VIP
- 成人反流误吸高危人群全身麻醉管理专家共识(2025版)解读PPT课件.pptx VIP
- 项目五研学旅行组织实施管理66课件.pptx VIP
- 铁路法知识课件.pptx VIP
- 实验室消防安全安全管理ppt.pptx VIP
文档评论(0)