A-A+

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

2024-04-26 18:17:57 网课题库 阅读

问题详情

有三个并发进程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 }

考点:个数,进程,缓冲区
Copyright © 2018-2024 问答库 保留所有权利.   SiteMap  .