- 1、本文档共171页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 互斥、同步与通讯
并发进程(concurrent processes)
进程互斥(mutual exclusion)
进程同步(synchronization)
进程高级通讯(communication)
4.1并发进程
4.1.1前驱图的定义
前驱图(precedence graph)是一个有向无环图,图中的每个结点表示一条语句、一个计算步骤或一个进程。结点间的有向边表示偏序或前驱关系(precedence relation)“→”,→={(pi,pj)∣ pi必须在pj启动之前完成}。 (pi,pj)∈ →可记为pi → pj,称pi是pj的前驱, pj是pi的后继。
4.1并发进程
在前驱图中没有前驱的结点称为初始结点,没有后继的结点称为终止结点。每个结点可以有一个权重(weight),它表示该结点所包含的程序量或计算时间。
前驱关系满足传递性,即若p1 → p2,p2 → p3,则必有p1 → p3。
4.1 并发进程
4.1.2 顺序程序及其特性
顺序性
内部顺序性:对于一个进程来说,它的所有指令是按顺序执行的。P1: a1,a2,a3; P2: b1,b2,b3
外部顺序性:对于多个进程来说,所有进程的活动是依次执行的。a1,a2,a3,b1,b2,b3; b1,b2,b3,a1,a2,a3
顺序程序特性:
(1)顺序性: 指令逐条执行
(2)封闭性: 不受其它程序及外界因素影响
(3)可再现性: 结果与推进速度无关
4.1 并发进程
4.1.3 并发程序及其特性
并发性
内部并发性:指程序内部的并发性。例如:
S1:a:=x+2;
S2: b:=y+4;
S3: c:=a+b;
S4: d:=c-6;
S5: e:=c+6;
S6: f:=c-e;
经分析知道S3必须在S1和S2之后执行,S4和S5必须在S3之后执行,S6必须在S3和S5之后执行;而S1和S2可以并发执行,S4和S5可以并发执行,S4和S6可以并发执行。
4.1并发进程
外部并发性:外部并发性是指多个程序的并发性。例如P1: a1,a2,a3; P2: b1,b2,b3 执行次序可以是如下情况:a1,b1,b2,a2,a3,b3; b1,b2,a1,b3,a2,a3
并发程序特性:
(1)间断性:多个程序是交叉执行的,处理器在执行一个程序的过程中有可能被中断,并转而执行另一个程序,有些交叉可能导致错误结果
(2)非封闭性:一个进程的运行环境受其他程序影响
(3)不可再现性:由于交叉的随机性,并发程序的多次执行可能对应不同的交叉,从而使得两次运行结果可能不同即不能期望从新运行的程序能够再现上次运行时产生的结果。
4.1并发进程
4.1.4程序并发执行的条件
并发是人们所期望的,但并发带来一个明显的问题就是程序执行的非封闭性,而人们却要求在非封闭性的条件下保持可再现性,因为只有可再现的结果才是正确的。
令:
R(pi)={a1,a2,…am}表示程序pi在执行期间所读取的所有变量的集合,称为“读集”。
W(pi)={b1,b2,…bn}表示程序pi在执行期间所修改的所有变量的集合,称为“写集”。
Bernstein条件(1966年由Bernstein提出):
若两个程序p1、p2满足以下条件,则能够保持可再现性,可以并发执行,条件是:
R(p1) ∩W(p2) ∪ R(p2) ∩W(p1) ∪ W(p1) ∩ W(p2) =Φ
4.1并发进程
并发程序的表示
并发程序常用并发语cobegin(concurrent begin)…coend(concurrent end)来表示,令S1、S2、…、Sn为n条语句,它们可以并发执行,则用并发语句表示为:
cobegin S1;S2;…; Sn coend;
有时也用并行语parallelbegin(parallel begin)…parallelend(parallel end)来表示
当遇到并发或并行语句时,同时n创建个进程(线程),分别执行S1、S2、…、Sn 。当它们都结束时,并发和并行语句结束。
4.1.6 与时间有关的错误
例:图书借阅系统 (x:某种书册数,设当前x=1.)
终端1: 终端2:
do{ do{
等待借书者; 等待借书者;
if x=1 { if x=1 {
___①
文档评论(0)