在测温系统中要完成采样、转换和显示等任务。采样过程把从传感器上得到的整型微电压值存入一个缓冲区,转换过程把微电压值从缓冲区中取出,计算转换成温度值再存入该缓冲区,显示过程把缓冲区中的温度值取出并显示。试用PV操作实现三个过程共享缓冲区的同步问题。
【正确答案】:采样过程相当于生产者,转换过程相当于消费者,显示过程为消费者,而转换过程还充当生产者。为此设立三个信号量:SS表示采集的微电压值能否存入缓冲区,初值为A;SC表示缓冲区中是否有微电压值要转换成温度值,初值为0;sD表示缓冲区是否有温度值要显示,初值为0。解决此同步问题的程序段为:
Begin
Ss,sc,sd:semaphore;
Buffer:integer;
ss:=A;
sc:=0;
sd:=0;
Cobegin
Process sample;
Begin
LA:get a sample;
P(ss);
buffer:=sample;
V(sc);
goto LA;
End
Proeess convert;
Begin
LB:P(sc);
take a sample from buffer;
convert the sample to temperature;
buffer:=temperature;
v(sd);
goto LB;
End
process display;
Begin
LC:p(sd);
take a temperature from buffer;
display the temperature;
goto LC;
End
Coend
End