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