设有n个缓冲区构成的缓冲区池,每个缓冲区能容纳一个整数。写进程writer把整数逐个存人缓冲区池,读进程reader则逐个从缓冲区池中读出数据,并打印输出,要求打印的与输入的完全一样,即个数、次序、数值一样。
试问:
(1)写进程与读进程间具体的制约关系如何?
(2)用PV操作写出这两个进程的同步算法程序。

欢迎免费使用小程序搜题/刷题/查看解析,提升学历,成考自考报名,论文代写、论文查重请加客服微信skr-web

设有n个缓冲区构成的缓冲区池,每个缓冲区能容纳一个整数。写进程writer把整数逐个存人缓冲区池,读进程reader则逐个从缓冲区池中读出数据,并打印输出,要求打印的与输入的完全一样,即个数、次序、数值一样。
试问:
(1)写进程与读进程间具体的制约关系如何?
(2)用PV操作写出这两个进程的同步算法程序。

根据题意可知,此问题是生产者/消费者问题,当写进程把一个整数 写入缓冲区时,要通知读进程读取数据并打印;当读进程从缓冲区读出整数后,要通知写进程缓冲区已空,可以继续向其存储数据。两个进程之间是同步关系。 共享的缓冲区池由n个缓冲区组成,每个缓冲区可以存放一个整数,缓冲区池可以存放n(n>1)个整数,信号量SP:表示是否可以将整数存入缓冲区,初值应为n;信号量SG:表示缓冲区中是否有数据,初值为O,当生产者存入缓冲区的数据个数不超过n时,调用P(SP)都可以顺利将数据存入,且每存入一个整数后需调用V(SG),告诉消费者缓冲区内有整数,只要SG>O,消费者都可以取走数据。消费者取走一个整数后调用V(SP),告诉生产者缓冲区多了一个存放数据的空间。因为要求打印与输出的完全一样,设置两个指针k(生产者向缓冲区存物品的位置)和t(消费者从缓冲区取物品的位置),它们的初值均为0,且保持一致,同步过程如下所示: Begin B:array[O…(n一1)]of integer; k,t:integer; k: =O; t: =O; SP,SG:semapllore;/*SP,SG为信号量*/ SP:=n;SG:=0;/*赋初值*/ Cobegin Process writer Begin L1:P(SP);/*调用P(SP),测试能否把数据存入缓冲区*/ B[k]:=product;/*将整数存入指针所指缓冲区*/ k:=(k+1)modn/*指针指向下一个可存放数据的位置*/ V(SG);/*发送缓冲区增加了一件可打印数据的消息*/ Goto L1; End; Process reader Begin L2:P(SG);/*测试缓冲区内是否有数据*/ Take a product from B[t];/*按指针所指缓冲区内位置读出数据*/ t:=(t+1)nod n/*指针指向下一个可取放物品的位置*/ V(SP);/*发送缓冲区可以再存一件物品的消息*/ Print;/*打印此数据*/ Goto L2; End; Coend; End;

访客
邮箱
网址

通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作


  • 自动写文案
  • 自动写小说
  • 马上扫码让Ai帮你完成工作
通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作

  • 自动写论文
  • 自动写软件
  • 我不是人,但是我比人更聪明,我是强大的Ai
Top