同步与互斥练习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
End
课堂练习题
Var mutex,full,empty:semaphore:=1,0,8; Begin Parbegin consumer: begin repeat wait ( full );
procedure: begin
repeat 生产一个成品; wait ( empty ); wait( mutex ); 将产品存入仓库; signal (mutex ); signal ( full ); until false; end end
输入进程 buf1 计算进程 buf2 打印进程
4、设有一个成品仓库,总共能够存放8台 成品,生产者生产产品放入仓库,消费者从 仓库中取出成品消费。为了防止积压,仓库 满时就停止生产。由于仓库搬运设备只有一 套,故成品的存入和取出只能分别执行,使 用 wait () 和 signal() 操作来实现该方案。
caculating wait(empty2); wait(mutex2); take a character from ch1; add to buffer2 signal(mutex2); signal(full2); until false end
OP:begin repeat wait(full2); wait(mutex2); take a character from buffer2; add to printer controler; signal(mutex2); signal(empty2); start printer; until false end parend
订票者: begin P(wmutex); 写操作; V(wmutex); End Parend
wait( mutex );
signal (mutex ); signal ( empty ); 消费成品; until false; end parend
将产品从仓库取出;
Var Sempty,Sfull,Tempty,Tfull:semaphore:=1, 0,1,0; PUT : begin repeat wait ( Sempty ); 将数据块写入S; signal ( Sfull ); until false; end
put 缓冲区S
copy 缓冲区T
get
6、某订票系统中,多个用户共享一个数据 库。多用户可以同时查询数据库内容,但若 一个用户要订票须更新数据库时,其余所有 用户都不可以访问数据库,若有用户在查询 数据库时,不允许订票。试用P、V操作解决 该问题。
7、假设有输入、加工和输出3个并发进程共享一 个缓冲区B,输入进程负责从输入设备读入一条 记录,每读一条记录后把它存放在缓冲区B中, 加工进程在缓冲区B中加工输入进程存入的记录。 输出进程负责把加工后的记录打印输出。缓冲区 B中每次只能存放一条记录,当记录被加工输出 后,缓冲区B中才可存放下—条新记录。请用P、 V操作来描述它们并发执行时能正确工作的程序。
3、如图示出了一个从键盘输入到打印机 输出的数据流图,其中键盘输入进程通过 缓冲区buffer1把输入数据传送给计算进 程,计算进程把处理结果通过缓冲 buffer2传送给打印进程。设上述两个缓 冲区的大小分别是n1和n2,为实现输入进 程与计算进程的同步,试写出键盘输入进 程、计算进程及打印进程间的同步算法。
COPY: begin repeat wait ( Sfull ); wait (Tempty) 将数据从S提取到 T 中; signal (Sempty ); signal ( Tfull ); until false; end GET : begin repeat wait (Tfull ); 从T中取数据打印; signal ( Tempty ); until false; end
Procedure P2 //进程2 Begin Repeat Section2 Repeat C2:=1-C1 Until C1<>0; Critcal section; C2:=1 Until false End parend End
2.(5,12,9)
课堂练习题
Var:mutex1,mutex2,empty1,empty2, full1,full2:=1,1,1,1,0,0; Begin parbegin: ip:begin repeat wait(empty1); wait(mutex1); input a character from keyboard; add to buffer1; signal(mutex1); signal(full1); until false end Cp:begin repeat wait(full1); wait(mutex1); take a character from buffer1; add to ch1 signal(mutex1); signal(empty1);
Var rmutex,wmutex: semaphore:=1,1; Readcount:integer:=0; Parbegin 查询者: begin P(rmutex); If readcount=0 then p(wmutex); Readcount:=readcount+1; V(rmutex); 读操作; P(rmutex); Readcount:=readcount-1; If readcount=0 then v(wmutex); V(rmutex); End
8、有如下并发运行的两个进程,试从“互斥”、“空闲让进”、 “有 限等待”等三个方面讨论两个进程互斥访问临界区算法的正确 性,如果它是正确的,则证明之;如果它不正确,请说明理由。
Var c1,c2:integer:=1,1 Begin Parbegin Procedure P1 //进程1 Begin Repeat Section1 Repeat C1:=1-C2 Until C2<>0; Critcal section; C1:=1 Until false End
课堂练习题
1.进程之间存在哪几种相互制约关系?各是什么原因引起 的?下列活动分别属于哪种制约关系? (1)若干同学去图书馆借பைடு நூலகம்; (2)两队举行篮球比赛; (3)流水线生产的各道工序; (4)商品生产和社会消费。
2.设有两个优先级相同的进程P1和P2如下。信号量s1和s2 的初值均为0,试问P1、P2并发执行结束后。X、Y、Z的值 各为多少? 进程P1 进程P2 Y=1; X=1; Y=Y+2; X=X+1; V(S1); P(S1); Z=Y+1; X=X+Y; P(s2); Z=X+Z; Y=Z+Y; V(S2);
5、设有进程A、B、C,分别调用过程 get, copy 和 put 对缓冲区 S 和 T 进行操作。其中 put 负责把数据块输入 缓冲区 S,copy 负责从 S 中提取数据块并复制到缓冲区 T 中, get从负责缓冲区 T 中取出信息打印,描述 get ,copy 及 put 的操作过程。如图。
相关文档
最新文档