pv原语练习题带答案.docVIP

  • 59
  • 0
  • 约6.13千字
  • 约 8页
  • 2017-12-10 发布于河南
  • 举报
pv原语练习题带答案

12、在一个仅允许单向行驶的单排车道十字路口,只允许车辆从南向北和从西向东行驶,如图8.1所示;为了安全起见,每次仅允许一辆汽车通过十字路口;当有车辆通过路口时其它车辆必须等待,当无车辆在路口行驶时则一次仅允许一辆汽车通过。请用P、V原语及信号量实现十字路口的交通控制系统,并描述具体的控制算法。 答:设一信号量sem表示是否允许汽车通过,初值为1,表示允许汽车通过。 设入口检测进程procedurein,出口检测进程procedureout,它们的描述如下: procedurein() begin L1:检测到有一辆车要进入路口 P(sem) 允许进入路口 goto L1 end procedureout() begin L2:检测到有一辆车驶出路口 V(sem) goto L2 end 13、设存在三个过程get、copy和put分别对缓冲区S和T进行操作,其中get负责将数据块存入缓冲区S,copy负责从缓冲区S读出数据并复制到缓冲区T中,put负责从缓冲区T中读出数据并打印,如图8.2所示。请用P、V操作描述上述三个过程。 答:设信号量SGC表示缓冲区S是否允许放数据,值为1时表示允许,初值为1;信号量SCG表示缓冲区S是否允许取数据,值为1时表示允许,初值为0;信号量SCP表示缓冲区T是否允许放数据,值为1时表示允许,初值为1;信号量SPC表示缓冲区T是否允许取数据,值为1时表示允许,初值为0。进程get、copy和put描述如下: get() begin L1:取存入缓冲区S的数据x P(SGC) 把数据x存入缓冲区S中 V(SCG) goto L1 end copy() begin L2: P(SCG) 把缓冲区S的数据存入x中 V(SGC) P(SCP) 把数据x要存入缓冲区T中 V(SPC) goto L2 end put() begin L3:P(SPC) 把缓冲区T的数据存入x中 V(SCP) 打印数据x goto L3 end 14、烟—吸烟者问题。考虑一个系统有三个吸烟者进程和一个代理进程。每个吸烟者持续不停地卷烟和吸烟。但是为了卷烟和吸烟,吸烟者必须同时拥有三种材料:烟丝、卷烟纸和火柴;三个吸烟者分别拥有其中的一种。代理可以提供足够的三种材料,但每次仅将两种不同的材料放在桌子上供吸烟者使用。手中拥有一种材料的吸烟者要卷烟和吸烟时就向代理发信号,代理然后将所需要的两种材料放在桌子上;如此循环重复这个过程。请写出代理和吸烟者间的同步算法。 答:设信号量S[i](i=1,2,3)表示第i个吸烟者是否提出请求,其值为1时表示提出请求,初值为1;SP表示桌上是否可以放材料,其值为1时表示提出请求,初值为1;ST[i] (i=1,2,3)表示是否放了第i个吸烟者所需的材料。三个吸烟者进程smoker[i]和一个代理进程agent描述如下: agent() begin L1:P(S[i]) P(SP) if i==1 then烟丝和卷烟纸 else if i==2 then烟丝和火柴 else 卷烟纸和火柴 V(ST[i]) goto L1 end smoker[i]() begin L2:P(ST[i]) 取所需的材料 V(SP) 卷烟 吸烟 V(S[i]) goto L2 end 15、请用算法描述读者和写者问题。 答:设共享变量count表示读者数量,初值为0;信号量SP表示是否允许读或写,其值为1时允许读或写,初值为1; SC表示是否可以使用共享变量COUNT,其值为1时表示可以使用,初值为1;读者进程reader和写者进程writer的描述如下: 描述1:用P、V操作描述。 reader() begin L1:P(SC) if count==0 then P(SP) count=count+1 V(SC) 进行读 P(SC) count=count-1 if count==0 then V(SP) V(SC) goto L1 end writer() begin L2:P(SP) 进行写 V(SP) goto L2 end 描述2:用signal、wait操作描述。 reader() begin L1:wait(SC) if count==0 then wait(SP) count=count+1 signal (SC) 进行读 wait (SC) count=count-1 if count==0 then signal(SP) signal(SC) goto L1 end writer() begin L2:wait(SP) 进行写 signal

文档评论(0)

1亿VIP精品文档

相关文档