ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:22.05KB ,
资源ID:11264625      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11264625.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(pv操作习题.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

pv操作习题.docx

1、pv操作习题设一民航售票系统有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 fals

2、e; 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

3、 个售票窗口,任何时刻最多可容纳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,代表由东向西行驶的桥上的车辆计数器

4、的互斥使用;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

5、 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 +

6、 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

7、); 上桥行驶; 到达桥另一端;V(S);某超市门口为顾客准备了100辆手推车,每位顾客在进去买东西时取一辆推车,在买完东西结完帐以后再把推车还回去。试用Wait/Signal操作正确实现顾客进程的同步互斥关系。semaphore S_CartNum=100;/ 空闲的手推车数量, 初值为100void consumer(void) / 顾客进程 Wait(S_CartNum); 买东西; 结帐; Signal(S_CartNum); 桌子上有一个水果盘,每一次可以往里面放入一个水果。爸爸专向盘子中放苹果,儿子专等吃盘子中的苹果。把爸爸、儿子看作二个进程,试用Wait/Signal操作使这四个

8、进程能正确地并发执行。semaphore S_PlateNum; / 盘子容量,初值为1semaphore S_AppleNum; / 苹果数量,初值为0父while(TRUE) Wait(S_PlateNum ); 往盘子中放入一个苹果; Signal(S_AppleNum); 子while(TRUE) Wait(S_AppleNum); 从盘中取出苹果; Signal(S_PlateNum); 吃苹果; 桌上有一空盘,允许存放一只水果,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用。 请用Wait/Signal原语

9、实现爸爸、儿子、女儿三个并发进程的同步。 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(苹果);s

10、2=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(

11、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产品

12、比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)个时,暂停对数量大的零件的进货,补充数量少的零

13、件。(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_

14、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

15、(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产品 多入库

16、的数量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;

17、 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

18、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

19、_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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1