进程同步练习题.docVIP

  • 175
  • 0
  • 约1.23万字
  • 约 19页
  • 2019-12-04 发布于江西
  • 举报
1.有一只铁笼子,每次只能放入一只动物。猎手向笼中放入老虎,农民向笼中放入猪,动物园等待取笼中的老虎,饭店等待取笼中的猪。试用PV操作写出能同步执行的程序。 解:信号量S:笼是否空,初值为1,即空 S1:笼中是否有老虎,初值为0,即无老虎 S2:笼中是否有猪,初值为0,即无猪 猎手进程 农民进程 动物园进程 饭店进程 P(S) P(S) P(S1) P(S2) 放入虎 放入猪 买老虎 买猪 V(S1) V(S2) V(S) V(S) 2.一条小河上有一座独木桥,规定每次只允许一个人过桥,现在河东河西都有人要过桥,如果把每个过桥者看作一个进程,为保证安全,请用PV操作实现正确管理. 答: var S:semaphore:=1; begin parbegin process(E-W)i(i=1,2……) begin wait(s); 过桥; singal(s); end process(W-E)i(i=1,2……) begin wait(s); 过桥; singal(s); end parend end 3.一条小河上有一座独木桥,同一方向的可连续过桥;某方向有人过桥时另一方向的人等待,现在河东河西都有人要过桥,如果把每个过桥者看作一个进程,为保证安全,请用PV操作实现正确管理. process(E-W)i(i=1,2……) begin wait(S1); rc1=rc1+1; if rc1=1 then wait(s); Signal(S1); 过桥; wait(S1); rc1=rc1-1; if rc1=0 then signal(s); signal(S1); end process(W-E)j(j=1,2……) begin wait(S2); rc2=rc2+1; if rc2=1 then wait(s); Signal(S2); 过桥; wait(S2); rc2=rc2-1; if rc2=0 then signal(s); signal(S2); end 4.在测温系统中要完成采样、转换和显示等任务。采样过程把从传感器上得到的整型微电压值存入一个缓冲区,转换过程把为电压值从缓冲区中取出,计算转换成温度值再存入该缓冲区,显示过程把缓冲区中的温度值取出并显示。试用PV操作实现三个过程共享缓冲区的同步问题。 解:分析:此题类似于两个生产者消费者问题。采样过程相当于生产者,转换过程相当于消费者,显示过程为消费者,而转换过程还充当生产者。为此设立三个信号量: ss: 采集的微电压值能否存入缓冲区,初值为1; sc:缓冲区中是否有微电压值要转换成温度值,初值为0; sd:缓冲区中是否有温度值要显示,初值为0。 begin buffer:integer; ss,sc,sd:semaphore=1,0,0; parbegin process Sample begin repeat get a sample; wait(ss); buffer:=sample; signal(sc); until false end; process convert begin repeat wait(sc); 取一个样品转换; buffer:=temperature; signal(sd); until false end; process Display begin repeat wait(sd); 取一个温度 ; signal(ss); 显示温度 until false end; parend end 5.某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请用PV操作实现管理。 解:定义一个信号量S,初值为20 parbegin process pl(l=1,2,……) begin wait(S); 进入售票厅; 购票; 退出; signal(S) end 6.生产围棋的工人不小心把相等数量的黑子和白子混装在一个盒子里,现在要用自动分拣系统把黑子和白子分开,该系统由两个并发执行

文档评论(0)

1亿VIP精品文档

相关文档