如图所示,系统中有三个进程GET、PRO和PUT,共用两个缓冲区BUF1和BUF2。假设BUF1中最多可放11个信息,现已放入了两个信息;BUF2最多可放5个信息。GET进程负责不断地将输入信息送入BUF1中,PRO进程负责从BUF1中取出信息进行处理,并将处理结果送到BUF2中,PUT进程负责从BUF2中读取结果并输出。试写出正确实现GET、PRO、PUT的同步与互斥的算法(要求:(1)用类C语言描述,条理清楚,注释恰当;(2)信号量原语统一使用wait和signal。)
empty1=9;//表示空的buf1的数目
empty2=5;//表示空的buf2的数目
full1=2;//表示buf1满的数目
full2=0;//表示buf2满的数目
mutex1=mutex2=1;//互斥信号源
Main()
{
cobegin//并发开始
CET();
PRO();
PUT();
coend//并发结束
}
//CET进程
void CET()
{
while(1)
{
..........
wait(empty1);
wait(mutex1);
//把信息放进buf1中
signal(mutex1);
signal(full1);
........
}
}
//PRO进程
void PRO()
{
while(1)
{
wait(full1);
wait(mutex1);
//把信息从buf1中取出
signal(mutex1);
signal(empty1);
wait(empty2);
wait(mutex2);
//把信息放进buf2中
signal(mutex2);
signal(full2);
}
}
//PUT进程
void PUT()
{
while(1)
{
wait(full2);
wait(mutex2);
//把信息从buf2中取出
signal(mutex2);
signal(empty2);
}
}