某软件有如下 3 个互相协作的功能: DataReceiver 负责不断接收数据、每次能接收 1 个数据, DataDisplay 将该数据送到用户界面进行显示, DataStorage 将该数据送到数据库存储。 DataReceiver 只有在该数据被显示和存储后才能接收下一个数据。三个功能的协作关系如下图所示。试使用记录型信号量控制上述三个功能的正确协作,在下面伪代码框架中补全缺少的代码。每个空白计 1 分。 Struct DataItem; DataItem buffer[1]; Semaphore sRecToDisplay = 空白 1 ; Semaphore sRecToStorage = 空白 2 ; Semaphore sDisplayOver = 空白 3 ; Semaphore sStorageOver = 空白 4 ; void DataReceiver( ) { while( true ) { P(sDisplayOver ); P( 空白 5 ); buffer[0] ¬ a new DataItem; V( 空白 6 ) V(sRecToStorage ) } } void DataDisplay( ) { while(true) { P(sRecToDisplay) Display buffer[0] V( 空白 7 ) } } void DataStorage ( ) { while(true) { P(sRecToStorage) Store buffer[0] V( 空白 8 ) } } void main() { cobegin DataReceiver( ); DataDisplay( ); DataStorage ( ); coend }