【操作系统习题】今有三个并发进程R,M,P,它们共享了一个可循环使用的缓冲区B,缓冲区B共有N个单元。

今有三个并发进程R,M,P,它们共享了一个可循环使用的缓冲区B,缓冲区B共有N个单元。进程R负责从输入设备读信息,每读一个字符后,把它存放在缓冲区B的一个单元中;进程M负责处理读入的字符,若发现读入的字符中有空格符,则把它改成“,”;进程P负责把处理后的字符取出并打印输出。当缓冲区单元中的字符被进程P取出后,则又可用来存放下一次读入的字符。请用PV操作为同步机制写出它们能正确并发执行的程序。

semaphore S1=1;
semaphore S2=0;
semaphore S3=0;
semaphore S4=N;//缓冲区B有N个单元
main()
{
	cobegin
	R();
	M();
	P();
	coend
}
R()
{
	P(S1);
	P(S4)
	char x=read();
	V(S2);
}
M()
{
	P(S2);
	if(x==' ')
	x=',';
	V(S1);
	V(S3);
}
P()
{
	P(S3);
	print(x);
	V(S4)
}

你可能感兴趣的:(【操作系统习题】今有三个并发进程R,M,P,它们共享了一个可循环使用的缓冲区B,缓冲区B共有N个单元。)