计算机操作系统第二章习题第三题的第一题1、假定系统有3个并发进程PA、PB、PC共享缓冲池B1和B2.进程PA负责从输入设备上读信息,每读出一次数据后把它放到缓冲池B1的缓冲区中,进程PB从缓冲池B1中取出一缓冲区的内容,经加工后放入缓冲池B2中,进程PC2将PB2中的数据取出并打印.设缓冲池B1和B2中缓冲区的个数分别为m和n.要求3个进程协调完成任务,使打印出来的信息与读入记录的个数、次序完全一样.请用P、V操作,写出这3个进程的并发程序.
问题描述:
计算机操作系统第二章习题第三题的第一题
1、假定系统有3个并发进程PA、PB、PC共享缓冲池B1和B2.进程PA负责从输入设备上读信息,每读出一次数据后把它放到缓冲池B1的缓冲区中,进程PB从缓冲池B1中取出一缓冲区的内容,经加工后放入缓冲池B2中,进程PC2将PB2中的数据取出并打印.设缓冲池B1和B2中缓冲区的个数分别为m和n.要求3个进程协调完成任务,使打印出来的信息与读入记录的个数、次序完全一样.
请用P、V操作,写出这3个进程的并发程序.
答
semaphore empty1,full1,empty2,full2,mutex1,mutex2;
empty1=m;empty2=n;full1=full2=0;
mutex1=mutex2=1;
parbegin
process PA{
while(1){
从输入设备上读信息;
P(empty1);
P(mutex1);
将读入的信息放入B1;
V(mutex1);
V(full1);
}
}
process PB{
while(1){
P(full1);
P(mutex1);
从B1中取出一缓冲区内容;
V(mutex1);
V(empty1);
加工内容;
P(empty2);
P(mutex2);
将加工后的内容放入B2;
V(mutex2);
V(full2);
}
}
process PC{
while(1){
P(full2);
P(mutex2);
从B2中取出内容;
V(mutex2);
V(empty2);
打印内容;
}
}
parend