【单选题】假设有三个并发进程P、Q、R。其中P负责从输入设备上读入信息并传给Q;Q将信息加工后传给R;R则负责将信息打印输出。 设:P、Q共享由m个缓冲区构成的缓冲池;Q、R共享另一个由n个缓冲区构成的缓冲池; 若一个缓冲区可保存一个数据信息,则P、Q、R三个进程的并发算法是( )
A.
var buffer1,buffer2; int full1,empty1,mutex1, mutex2; int full2,empty2; begin full1:=0; empty1:= m; mutex:=1; full2:=0; empty2:= n; Parbegin P: { repeat 从设备读入数据; P(empty1); P(mutex1); 放入缓冲池buffer1; V(mutex1); V(full1); until false; } end; Q: { repeat P(full1); P(mutex2); 从缓冲池buffer1取数据; V(mutex1); V(empty2); P(empty2); P(mutex2); 放入缓冲池buffer2; V(mutex2); V(full2); until false; } end; R: { repeat P(full1); P(mutex2); 从缓冲池buffer2取数据; V(mutex2); V(empty1); 打印; until false; } Parend
B.
var buffer1,buffer2; int full1,empty1,mutex1, mutex2; int full2,empty2; begin full1:=0; empty1:= n; mutex:=1; full2:=0; empty2:= m; Parbegin P: { repeat 从设备读入数据; P(empty1); P(mutex1); 放入缓冲池buffer1; V(mutex1); V(full1); until false; } end; Q: { repeat P(full1); P(mutex1); 从缓冲池buffer1取数据; V(mutex1); V(empty1); P(empty1); P(mutex2); 放入缓冲池buffer2; V(mutex2); V(full1); until false; } end; R: { repeat P(full2); P(mutex2); 从缓冲池buffer2取数据; V(mutex2); V(empty2); 打印; until false; } Parend
C.
var buffer1,buffer2; int full1,empty1,mutex1, mutex2; int full2,empty2; begin full1:=0; empty1:= n; mutex:=1; full2:=0; empty2:= m; Parbegin P: { repeat 从设备读入数据; P(empty1); P(mutex1); 放入缓冲池buffer1; V(mutex1); V(full1); until false; } end; Q: { repeat P(full1); P(mutex1); 从缓冲池buffer1取数据; V(mutex1); V(empty1); P(empty2); P(mutex2); 放入缓冲池buffer2; V(mutex2); V(full2); until false; } end; R: { repeat P(full2); P(mutex2); 从缓冲池buffer2取数据; V(mutex2); V(empty2); 打印; until false; } Parend
D.
var buffer1,buffer2; int full1,empty1,mutex1, mutex2; int full2,empty2; begin full1:=0; empty1:= m; mutex:=1; full2:=0; empty2:= n; Parbegin P: { repeat 从设备读入数据; P(empty1); P(mutex1); 放入缓冲池buffer1; V(mutex1); V(full1); until false; } end; Q: { repeat P(full1); P(mutex1); 从缓冲池buffer1取数据; V(mutex1); V(empty1); P(empty2); P(mutex2); 放入缓冲池buffer2; V(mutex2); V(full2); until false; } end; R: { repeat P(full2); P(mutex2); 从缓冲池buffer2取数据; V(mutex2); V(empty2); 打印; until false; } Parend