pv操作习题.doc_第1页
pv操作习题.doc_第2页
pv操作习题.doc_第3页
pv操作习题.doc_第4页
pv操作习题.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设一民航售票系统有n个售票处。每个售票处通过终端访问系统中的公用数据区,假定公用数据区中分别用R1、R2、R3、Rn表示月日次航班的现存票数。设P1、P2、P3、Pn表示各售票处的处理进程,试用信号量实现进程间的互斥关系Var s: semaphore :=1; begin parbegin process Pi: begin repeat Wait (s); 按旅客定票要求找到Rk if Rk=1 then begin Rk=Rk-1; Signal (s); 输出一张票; end; else begin Signal (s); 输出“票已售完”; end; until false; end parend end 生产围棋的工人不小心把相等数量的黑子和白子混装在一个箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,功能如下:(1)进程A专门拣黑子,进程B专门拣白子;(2)每个进程每次只拣一个子,当一个进程在拣子时不允许另一个进程去拣子;s:semaphore:=1;parbeginprocess A:begin L1: Wait(s); 拣黑子; Signal(s); goto L1; end; process B:begin L2:Wait(s); 拣白子; Signal(s); goto L2; end;parend;某车站售票厅共有20 个售票窗口,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,厅外的购票者可立即进入,否则需要在外面等待。每个购票者可看成一个进程。s:semaphore=20;parbeginprocess Pi(i=1,2,)begin Wait(s);进入售票厅;购票;退出;Signal(s);end;parend有座东西方向架设、可双向通行的单车道简易桥,最大负荷为4 辆汽车。请定义合适的信号量,正确使用wait/signal 操作,实现双向车辆的过桥过程。信号量应该有4 个:S ,初值为1,代表桥的互斥使用的信号量;Scounteast,初值为1,代表由东向西行驶的桥上的车辆计数器的互斥使用;Scountwest,初值为1,代表由西向东行驶的桥上的车辆计数器的互斥使用;Scount4 ,初值为4,代表桥上车辆的计数信号量。var S,Scounteast,Scounwest,Scount4:semaphore;S: = 1; Scounteast1; Scountwest: = 1; Scount4: = 4; Counteast,Countwest:integer;Counteast: = 0;Countwest: = 0;Cobegin , process east( i ) begin P( Scounteast ) ; if Counteast = 0 then P( S ) ; Counteast : = Counteast + l ; V( Scounteast ) ; P( Scount4 ) ; 上桥:过桥:下桥; V ( Scount4 ) ; P ( Scounteast ) ; Counteast: = Counteast - 1 ; if Counteast = 0 then V( S ) ; V ( Scounteast ) ; end ; process west( i ) begin P( Scountwest ) ; if Countwest = 0 then P( S ) ; Countwest: = Countwest + 1 ; V( Scountwest ) ; P ( Scount4 ) ; 上桥;过桥:下桥: V ( Scount4 ) ; P ( Scountwest ) ; Countwest:= Countwest - l ; if Countwest = 0 then V( S ) ; V( Scountwest ) ; end ; Coend 有一单向行驶的公路桥,每次只允许一辆汽车通过。当汽车到达桥头时,若桥上无车,便可上桥;否则需等待,直到桥上的汽车下桥为止,若每一辆汽车为一个进程,请用Wait、Signal操作原语保证汽车按要求过桥。汽车进程:Pi(i=1,2,3,) 到达桥头; P(S); 上桥行驶; 到达桥另一端;V(S);某超市门口为顾客准备了100辆手推车,每位顾客在进去买东西时取一辆推车,在买完东西结完帐以后再把推车还回去。试用Wait/Signal操作正确实现顾客进程的同步互斥关系。semaphore S_CartNum=100;/ 空闲的手推车数量, 初值为100void consumer(void)/ 顾客进程 Wait(S_CartNum); 买东西; 结帐; Signal(S_CartNum); 桌子上有一个水果盘,每一次可以往里面放入一个水果。爸爸专向盘子中放苹果,儿子专等吃盘子中的苹果。把爸爸、儿子看作二个进程,试用Wait/Signal操作使这四个进程能正确地并发执行。n semaphore S_PlateNum;/ 盘子容量,初值为1n semaphore S_AppleNum;/ 苹果数量,初值为0父while(TRUE) Wait(S_PlateNum ); 往盘子中放入一个苹果; Signal(S_AppleNum); 子while(TRUE) Wait(S_AppleNum); 从盘中取出苹果; Signal(S_PlateNum); 吃苹果; 桌上有一空盘,允许存放一只水果,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用。 请用Wait/Signal原语实现爸爸、儿子、女儿三个并发进程的同步。 int S=1; /S 表示盘子是否为空;int Sa=0; /Sa表示盘中是否有苹果;int Sb=0; /Sb表示盘中是否有桔子; 父亲while(TRUE) Wait(S); 将水果放入盘中; if (放入的是桔子) Signal(Sb); Else Signal(Sa); 儿子while(TRUE) Wait(Sb); 从盘中取出桔子; Signal(S); 吃桔子; 女儿while(TRUE) Wait(Sa); 从盘中取出苹果; Signal(S); 吃苹果; 父亲-母亲-儿子-女儿一个苹果或桔子信号量:s=1(空盘);s1=0(苹果);s2=0(桔子);爸爸:while(true) wait(s); 放苹果; signal(s1); 妈妈:while(true) wait(s); 放桔子; signal(s2); 儿子:while(true) wait(s2); 取桔子; signal(s); 女儿:while(true) wait(s1); 取苹果; signal(s); 父亲-母亲-儿子-女儿两个苹果或桔子信号量:s=2(可用);s1=0(苹果);s2=0(桔子);mutex=1;爸爸:wait(s); wait(mutex);放苹果; signal(s1); signal(mutex);妈妈:wait(s); wait(mutex); 放桔子; signal(s2); signal(mutex);儿子:wait(s2); wait(mutex); 取桔子; signal(s); signal(mutex);女儿:wait(s1); wait(mutex); 取苹果; signal(s); signal(mutex);有一个仓库(无限大),可以存放A和B两种产品,但要求: (1) 每次只能存入一种产品(A或 B); (2) NA产品数量B产品数量M其中,N和M是正整数。试用Wait/Signal 操作描述产品A与产品B的入库过程。int mutex=1; /互斥信号量int sa=M-1; /表示当前允许A产品比B产品多入库的数量int sb=N-1; /表示当前允许B产品比A产品多入库的数量main( )while (1) 取一个产品;if (取的是A产品)P(sa);P(mutex);将产品入库;V(mutex);V(sb);elseP(sb);P(mutex);将产品入库;V(mutex);V(sa);某仓库存放两种零件A和B,最大数量均为m个。 有一车间不断地取A和B进行装配,每次各取一个。为避免零件锈蚀,遵循先入库者先出库的原则。有两个供应商分别不断地供应A、B零件(每次一个)。为保证齐套和合理库存,当某种零件的数量比另一种的数量超过n(nm)个时,暂停对数量大的零件的进货,补充数量少的零件。(1) 问共需设置几个进程?(2) 用Wait/Signal操作解决上述问题中的同步互斥关系。本题中给出的两种零件数量关系为:A零件数量-B零件数量nB零件数量-A零件数量nA零件数量mB零件数量msemaphore mutex=1;semaphore emptya=m;semaphore emptyb=m;semaphore fulla=0;semaphore fullb=0;semaphore sa=n;semaphore sb=n;main() cobegin Provider_A(); Provider_B(); Assembling_shop(); conendProvider_A() while(true) wait(emptya); wait(sa); wait(mutex); 将零件A放入仓库; signal(mutex); signal(fulla); signal(sb); Provider_B() while(true) wait(emptyb); wait(sb); wait(mutex); 将零件A放入仓库; signal(mutex); signal(fullb); signal(sa); Assembling_shop() while(true) wait(fulla); wait(fullb); wait(mutex); 装配零件; signal(mutex); signal(emptya); signal(emptyb); 设有两个生产者进程A、B和一个销售者进程C,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售者销售;销售者每次循环从仓库中取出一个产品进行销售。如果不允许同时入库,也不允许边入库边出库;而且要求生产和销售A产品和B产品的件数都满足一下关系: -NA产品数量B产品数量M 其中,N和M是正整数。 试用信号量机制写出A、B、C三个进程的工作流程。int mutex=1; /互斥信号量int s1=M; /表示当前允许A产品比B产品 多入库的数量int s2=N; /表示当前允许B产品比A产品 多入库的数量int s=0; /表示当前仓库中产品的总数量int sa=0; /表示当前仓库中A产品的数量int sb=0; /表示当前仓库中B产品的数量int dif=0;/表示所销售的A、B产品的数量差Process_A:while (1) wait(s1); produce a product A; signal(s2); wait(mutex); add the product A to the storehouse; signal(mutex); signal(sa); signal(s);Process_B:while (1) wait(s2); produce a product B; signal(s1); wait(mutex); add the product B to the storehouse; signal(mutex); signal(sb); signal(s);Process_C:while (1) wait(s); if dif=m wait(sb); wait(mutex); take a product B; signal(mutex); dif:=dif-1; else wait(mutex); take a product; signal(mutex); if product_type=A wait(sa); dif:=dif+1; else wait(sb); dif:=dif-1; sell the product;一个数据采集系统,有数据采样进程和数据处理进程及数据输出进程。采样进程把采到的数据送入buf1中,由数据处理进程取出处理并存入buf2中,然后由数据输出进程将其从buf2中输出,试给出实现三个进程同步的算法。信号量设置:semphore empty1=1;Semphore full1=0;semphore empty2=1;sSemphore full2=0;Process_A() while(true) 采集一个数据; Wait(empty1); 将数据存入buf1中; Signal(full1); Process_B() while(true) Wait(full1); 从buf1中取出数据; Signal(empty1); 处理数据; Wait(empty2); 将处理结果存入buf2; Signal(full2); Process_C() while(true) Wait(full2); 从buf2中取出结果; Signal(empty2); 打印输出; 在天津大学与南开大学之间有一条弯曲的小路,这条路上每次每个方向上只允许一辆自行车通过。但其中有一个小的安全岛M,同时允许两辆自行车停留,可供两辆自行车已从两端进入小路的情况下错车使用。begin t:=1;s:=1;l:=1;k:=1;m=2; cobegin Process_T2N() begin wait(t); wait(l); 通过L路段; wait(m); 进入安全岛M; signal(l); wait(k); 通过K路段 signal(m); signal(k); signal(t); endProcess_N2T() begin wait(s); wait(k); 通过K路段; wait(m); 进入安全岛M; signal(k); wait(l); 通过L路段; signal(m); signal(l); signal(s); end coendend【例2】桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。分析在本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。本题实际上是生产者-消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。解:在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论