第3章练习解答
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下乘客
例5:设有三个并发进程R,M,P。它们共享同一 只能放一个记录的缓冲区。进程R向缓冲区以记 录为单位输入数据;M在缓冲区加工数据;P把加 工数据取出打印,请设计正确执行的P,V操作程 序。
解:设置信号量三个,初值为Sr=1,Sm=0,Sp=0. 则程序如下:
进程R
进程M
进程P
P(Sr)
P(Sm)
进程P1
进程P2
P(S)
P(S)
向盘中放苹果
向盘中放桔子
V(S1)
V(S2)
进程P3 P(S1)
取盘中苹果 V(S)
进程P4 P(S2) 取盘中桔子 V(S)
例4:设某公共汽车上,司机和售票员的活动分别是:
司机:
售票员:
启动车辆
上乘客
正常行车
关车门
到站停车
售票
开车门
下乘客
பைடு நூலகம்
在汽车不断地到站,停车、行驶过程中,这两个活动有什么
例1:有一只铁笼子,每次只能放入一只动物,猎人向 笼中放入老虎,农民向笼中放入羊,野生动物园等待 取笼中的老虎,饭店等待取笼中的羊,试用P.V操作
写出能同步执行的程序.
解:这是两个生产者和两个消费者共享只能存放一 件产品的缓冲区,利用P.V操作编程如下:
猎人进程 农民进程 动物园进程 饭店进程
P(S) 放入虎
P(S) 放入羊
P(S1) 取老虎
P(S2) 取羊
V(S1) V(S2)
V(S)
信号量初值:S=1,S1=0,S2=0
V(S)
但如果要编程,可编程如下: begin S, S1, S2:Semaphore; S:=1;S1:=0;S2:=0; cobegin process hunter
begin repeat
B0S1=2:B0S2=1:B1S1=2:B1S2=0:B2S1=2:B2S1=0
也可增加互斥信号量,P0,P1互斥使用B0
P1,P2互斥使用B1, P2,P0互斥使用B2
COBEGIN P0: BEGIN
P(B0S2); 从B0取一个数据
V(B0S1) 加工
P(B1S1) 将加工结果送B1
V(B1S2); END
进程P1 P(S1) 拣一白子
V(S2)
进程P2 P(S2)
拣一黑子
V(S1)
例3:桌上有一只盘子,每次只能放入一个水果,进 程向盘中放苹果,进程向盘中放桔子,进程取走 盘中苹果,进程取走盘中桔子。试用P,V操作写 出它们能正确执行的程序。
解:设信号量S的初值1,信号量的S1和 S2初值均 为0。程序如下:
同步关系?用P,V操作编制同步程序。
▪ 解:设P1为司机进程,P2为售票员进程,信号量S1表车 开,S2表车停,假定汽车初始状态为停车状态,信号量初 值S1:=0,S2:=0.则同步程序如下:
进程P1 P(S1)
进程P2 上乘客
启动车辆
关车门
行车 到站停车
V(S1) 售票
V(S2)
P(S2)
开车门
cobegin end
例2:在一个盒子里,混装了数量相同的围棋白子和 黑子。现要由进程和把白子和黑子分开。拣白子, 拣黑子,规定每个进程每次只拣一子,当一进程 不在拣子时,不允许另一个进程去拣,当一进程 拣了一子时,必须让另一进程接着去拣。试用P.V 操作写出这两个进程正确执行的程序。
解:由规定,每进程每次只拣一子,且每次只能一 进程拣子,故两进程互斥进入,但每进程拣一子 后,另一进程必须进入拣子。则其实是同步问题, 故设置两信号量S1、S2,如果先让P1拣白子,则 信号量初值S1=1,S2=0,两并发进程程序如下:
B0 P0
P2
B1
B2 P1
解:这是一个生产者和消费者问题,每个进程既是生 产者又是消费者。为此应设立6个信号量:B0S1, B0S2,B1S1,B1S2,B2S1,B2S1,分别代表B0, B1,B2中是否有空缓冲区和数据。
B0S1,B0S2,B1S1,B1S2,B2S1,B2S1:semaphore
SEMAPHORE Vb,Vc,Vd,S,R Vb=0;Vc=0;Vd=0;S=1;R=0 COBEGIN 发送进程: BEGIN L:P(S)
have a tiger P(S) put a tiger V(S1) forever end process peasant begin repeat have a goat P(S) put a goat V(S2) forever end
process hotel begin repeat P(S2) get a goat V(S) eat a goat forever end process zoo begin repeat P(S1) get a tiger V(S) get a tiger forever end
P(Sp)
数据→缓冲区 处理数据 打印→数据
V(Sm)
V(Sp)
V(Sr)
例1:如图所示的工作模型中,有3个进程P0,P1,P2和 三个缓冲区B0,B1,B2。进程之间借助于相邻缓冲区进 行消息传递:每个进程每次从缓冲区中取一条消息,经加工 处理后送入另一个缓冲区中,三个缓冲区分别可存放3、2、 2个消息。初始时,仅缓冲区0有一个消息。试用P、V操作 写出三个进程之间的同步及互斥流程。
P1: BEGIN
P(B1S2); 从B1取一个数据
V(B1S1) 加工
P(B2S1) 将加工结果送B2
V(B2S2); END
P2: BEGIN
P(B2S2); 从B2取一个数据
V(B2S1) 加工
P(B0S1) 将加工结果送B0;
V(B0S2); END COEND
例6:设有四个进程A、B、C、D,进程A通过一个 缓冲区不断向进程B、C、D发送消息,A每向缓 冲区发送一个消息后,必须等进程B、C、D都取 走后才可以发送下一消息。B、C、D对A送入的 每一个消息各取一次,试用P、V操作实现他们的 正常通信。
解答:由于缓冲区的容量只能存放一个产品,应使 所生产的每一个产品都能被接受者取走又不能取 重。故应设三个同步信号量Vb,Vc,Vd,用来制约三 个接收者,每当进程A送一消息到缓冲区时,对 三个信号量执行V操作,仅当三个接收者都取走 后,才能送下一个产品,设一个代表缓冲区可用 量的信号量S,制约发送进程。再设一个计数器R 和互斥信号量mutex,R记录三个接收者是否已取 走,信号量mutex用来使三者互斥访问R.用PV操 作实现它们之间通信的算法描述如下: