设有两个进程A和B,它们共享一个缓冲器,进程A(生产者)不断地读入记录并送到缓冲器,进程B(消费者)不断地从缓冲器中取出记录并加工。假设缓冲器的容量为每次只能存放一个记录。进程A将一个记录送入缓冲器后,应等到进程B发来消息(已将缓冲器中的记录取走),才能把下一个记录存入缓冲器。进程B把已存入缓冲器的记录取走后,也应等到A发来消息(缓冲器已趣入一个待加工的记录),才能从缓冲器中取出记录去加工。用PV操作实现生产者/消费者之间的同步。

题目

设有两个进程A和B,它们共享一个缓冲器,进程A(生产者)不断地读入记录并送到缓冲器,进程B(消费者)不断地从缓冲器中取出记录并加工。假设缓冲器的容量为每次只能存放一个记录。进程A将一个记录送入缓冲器后,应等到进程B发来消息(已将缓冲器中的记录取走),才能把下一个记录存入缓冲器。进程B把已存入缓冲器的记录取走后,也应等到A发来消息(缓冲器已趣入一个待加工的记录),才能从缓冲器中取出记录去加工。用PV操作实现生产者/消费者之间的同步。


相似考题
更多“设有两个进程A和B,它们共享一个缓冲器,进程A(生产者)不断地读入记录并送到缓冲器,进程B(消费者 ”相关问题
  • 第1题:

    有三个并发进程R、W1和W2,共享两个各可存放一个数的缓冲区B1、B2。进程R每次从输入设备读入一个数,若读入的是奇数,则将它存入B1中,若读入的是偶数,将它存入B2中;当B1中有数,由进程W1将其打印输出;当B2中有数,进程W2将其打印输出。试编写保证三者正确工作的程序。


    struct semaphone B1_Empty, B1_Full, B2_Empty, B2_Full; B1_Empty.value=1; B1_Full.value=0; B2_Empty.value=1; B2_Full.value=0; void R( ) { int a; While(1) { read a number a; if(a%2==1) { wait(B1_Empty); put a in B1; signal(B1_Full); } else { wait(B2_Empty); put a in B2; signal(B2_Full); } } } void W1( ) { while(1) { wait(B1_Full); print a number from B1; signal(B1_Empty); } } void W2( ) { while(1) { wait(B2_Full); print a number from B2; signal(B2_Empty); } } void main( ) { cobegin R( ), W1( ), W2( ); coend }

  • 第2题:

    2、【某学期考题】假定系统有三个并发进程read, move和print共享缓冲器B1和B2。进程read负责从输入设备上读信息,每读出一个记录后把它存放到缓冲器B1中。进程move从缓冲器B1中取出一记录,加工后存入缓冲器B2。进程print将B2中的记录取出打印输出。缓冲器B1和B2每次只能存放一个记录。要求三个进程协调完成任务,使打印出来的与读入的记录的个数,次序完全一样。请用信号量及PV操作实现这三个进程的同步。(要求设置信号量的初值)


    某一时间间隔内发生

  • 第3题:

    26、父进程和子进程在资源共享方面的关系有()。

    A.父进程共享子进程资源的子集

    B.父进程子进程共享所有的资源

    C.子进程共享父进程资源的子集

    D.父进程和子进程无资源共享


    父进程子进程共享所有的资源;子进程共享父进程资源的子集;父进程和子进程无资源共享

  • 第4题:

    用PV操作解决生产者和消费者问题。假设有一个可以存放1件产品的缓冲器;有m个生产者,每个生产者每次生产一件产品放入缓冲器中,有n个消费者,每个消费者每次从缓冲器中取出一件产品。


    解: 设信号量Sp表示是否可以把产品放入缓冲器中; 信号量Sg表示缓冲器中是否存放了产品; int buffer; int Sp,Sg; Sp=1; Sg=0; Cobegin void producer i () // i=1,2,3 , ... ,m { L1: [ produce a product ]; P(Sp); Buffer=product ; V(Sg); Goto L1 ; } void consumer j () // j=1,2,3 , ... ,n { L2: P(Sg); [take a product from buffer ]; V(Sp); [consume]; Goto L2; } coend

  • 第5题:

    6、进程A和进程B共享变量1,需要互斥;进程B和进程C共享变量2,需要互斥;从而进程A与进程C也必须互斥


    错误