今有R,M,P三个进程,共享一个具有N个存储单元的循环缓冲区B ,R进程负责读入字符到缓冲B,M进程负责处理数据,如果输入字符为字符为空格,将他改为逗号,进程P负责将处理后的字符输出打印,进程输入打印一个字符后,又可以用来存放下一个数据。请用P V操作描述三个进程的同步
解:设置4个信号量
empty=N //可使用的缓冲区总数目
full1=0;//表示已输入字符个数
full2=0;//表示已经处理的字符个数
mutex=1;//用于表示进程互斥的信号量
char Buffer[N] //表示缓冲区
in=0;//表示指向下一个缓冲区
out1=0;//表示指向下一个待处理的字符
out2=0;//指向下一个待输出的字符
main(){
R();
M();
P();
}
R(){
while(true){
char x;
读入一个字符到x
P(empty);
P(mutex);
Buffer[in]=x;
in=(in+1)%N;
V(mutex);
V(full1);
}
}
M(){
while(true){
char x;
P(full1);
P(mutex);
x=Buffer[out1];
if(x==" "){
x=","
}
buffer[out1]=x;
out1=(out1+1)/N;
V(mutex);
V(full2);
}
}
P(){
while(true){
char x;
P(full2);
P(mutex);
x=Buffer[out2];
out2=(out2+1)%N;
V(mutex);
V(empty);
print("%c",x)
}
}