三. SIMULA67协同程序 1.两个或两个以上程序单元之间交错地 执行这样的程序称为协同程序
三. SIMULA 67协同程序 1. 两个或两个以上程序单元之间交错地 执行,这样的程序称为协同程序
2.SⅠMULA67的协同程序是一个类实例 般形式为 class类名(参数 若设类x,变量y1和y2 参数说明 是对x的引用,那么可 begin 写成 说明; yl:-newx(…)2 语句表1 2: -new x(...) detach 当遇到一个new时,建 言 表2 立类的一个新实例,并 执行类体 en d
2. SIMULA 67的协同程序是一个类实例 一般形式为: class 类名(参数); 参数说明; begin 说明; 语句表1; detach; 语言表2 end 若设类x, 变量y1和y2 是对x的引用, 那么可 写成: y1:-new x(…); y2:-new x(…); 当遇到一个new时, 建 立类的一个新实例, 并 执行类体
3玩牌游戏少 begin boolean gameover; integer winner; s class player(n, hand); integer n integer array hand(1: 13) begin ref(player )next detach whle not gameover do begin出牌; if gameover then winner:n else resume(next) end en
3. 玩牌游戏 begin boolean gameover; integer winner; class player(n,hand); integer n; integer array hand(1:13); begin ref(player) next; detach; while not gameover do begin 出牌; if gameover then winner:=n else resume(next) end end
ref(player array p(1: 4), integer 1; integer array cardS(1: 13); 2 for i =I ste step I until 4 de begin第傢家拿牌; p(i): -new player(i, cards) en for 1: =1 step 1 until 3 do p(i). next: p(i+1); p(4). next: -p(1) resume 打印胜利者( winner end
ref(player) array p(1:4);integer i; integer array cards(1:13); for i:=1 step 1 until 4 do begin 第i家拿牌; p(i):-new player(i, cards) end; for i:=1 step 1 until 3 do p(i).next:-p(i+1); p(4).next:-p(1); resume (1); 打印胜利者(winner) end
四并发单元 1.—个例子 生产者-消费者”问题 单元 producer」 单元 consumer repeat生产一个元素 repeat从缓冲区移出一项; 存放这个元素到缓冲区;对该项执行某个运算 orever orever
四.并发单元 1. 一个例子 “生产者-消费者”问题 单元producer 单元consumer repeat 生产一个元素; 存放这个元素到缓冲区; forever repeat 从缓冲区移出一项; 对该项执行某个运算; forever
2.几个基本概念 ①并发单元的特点诸程序单元并行活动 ②同步问题 正确访问缓冲区:不会向已满的缓冲区写数据, 不会从空缓冲区读数据
2. 几个基本概念 ①并发单元的特点:诸程序单元并行活动 ②同步问题 正确访问缓冲区:不会向已满的缓冲区写数据, 不会从空缓冲区读数据
动作的”不可分”与”可分 设表示所存项目总数 append是生产者向缓 冲区存数的操作, remove是消费者从缓冲区取 数的操作这两个操作都要修改t的值相应执行 操作(1)t:=t+1和(2)t=t-1来实现。假定(1)和 (2)是这样实现的 读t到一个专用寄存器; 更新专用寄存器的值; 将专用寄存器的值写到t;
动作的”不可分”与”可分” 设t表示所存项目总数,append是生产者向缓 冲区存数的操作,remove是消费者从缓冲区取 数的操作,这两个操作都要修改t的值,相应执行 操作(1)t:=t+1和(2)t:=t-1来实现。假定(1)和 (2)是这样实现的: 读t到一个专用寄存器; 更新专用寄存器的值; 将专用寄存器的值写到t;
互斥:执行(1)时不能开始执行(2),反之亦然。 即、(1)和(2)必须以互斥的方式执行,(1)或(2)就 像不可分的操作。 ③进程的并发性诸进程的执行概念上是可重 叠的(即正在执行的进程尚未终止,另一个进 程可能开始执行)
互斥:执行(1)时不能开始执行(2),反之亦然。 即,(1)和(2)必须以互斥的方式执行,(1)或(2)就 像不可分的操作。 ③进程的并发性:诸进程的执行概念上是可重 叠的(即正在执行的进程尚未终止,另一个进 程可能开始执行)
3.信号灯 信号灯是一个数据对象,该数据对象采用一个 整数值,并可用原语P和Ⅴ对它进行操作。信号 灯在说明时以某个整数值对它初始化
3. 信号灯 信号灯是一个数据对象,该数据对象采用一个 整数值,并可用原语P和V对它进行操作。信号 灯在说明时,以某个整数值对它初始化
①P、V操作的定义 P(S): if s>0 then S: s-1 else挂起当前进程 V(s):if信号灯上有挂起的进程 then唤配进程 else s =S+1
①P、V操作的定义 P(s): if s>0 then s:=s-1 else 挂起当前进程 V(s): if 信号灯上有挂起的进程 then 唤配进程 else s:=s+1