测量控制系统中,数据采集任务把所采集的数据送人一个单缓冲区;计算任务从该缓冲区中取出数据进行计算,写出利用信号量机制实现两者共享单缓冲区的进程同步算法。
测量控制系统中,数据采集任务把所采集的数据送人一个单缓冲区;计算任务从该缓冲区中取出数据进行计算,写出利用信号量机制实现两者共享单缓冲区的进程同步算法。
【正确答案】:根据题意分析可知:单缓冲区为共享资源,数据采集任务采集到一个数据后,如果缓冲区为空,则将数据存入缓冲区,否则等待缓冲区为空;当缓冲区中有数据时,计算任务才能从缓冲区取出数据进行计算,否则等待。本题需要设置两个信号量S1:表示缓冲区中是否有可供计算的数据,初值为0;S2:表示单缓冲区是否还有空位置存放数据,初值为1 。数据采集任务采集一个数据后调用P(S2),测试是否可以把数据存入缓冲区:当缓冲区无数据(S2=1),调用P(S2)后可继续执行,成功将数据存入缓冲区,并调用V(S1),通知计算任务缓冲区中已经有了一个数据,此时S1的值由0变成1;数据采集任务已经无法再将采集的数据存入缓冲区了,调用P(S2)后将阻止数据存入。计算任务取出物品前应该调用P(S1)查看缓冲区内是否有数据,S1=0时,无数据,调用P(S1)后计算任务等待;有数据时,S1=l,调用P(S1)后计算任务顺利执行取走数据。取走数据后,消费者应调用V(S2),通知数据采集进程缓冲区已空,可以存入新数据。过程如下所示: Begin S1,S2:semaphore;/*S1,S2为信号量*/ S1:=0;S2:=1;/*赋初值*/ Cobegin Process caiji Begin L1:采集一个数据; P(S2);/*调用P(S2),测试能否把数据存入缓冲区*/ 将采集的数据存入缓冲区; V(S1);/*发送缓冲区已经有数据的消息*/ Goto L1; End; Process j isuan Begin L2:P(S1);/*测试缓冲区内是否有数据*/ 从缓冲区取出数据; V(S2);/*发送缓冲区可以再存数据的消息*/ 进行数据计算; Goto L2; End; Coend; End;
Top