试题题干
在循环缓冲方案中,如果Nexti指针追上Nextg指针,说明生产者进程速度大于消费者进程速度,全部缓冲区已满。此时需要生产者进程,等待消费者进程为生产者进程释放
。
参考答案
试题解析
循环缓冲的组成:
(1)多个缓冲区。
1)空缓冲区R:生产者进程下一个可用的空缓冲区。
2)已装满数据的缓冲区G:用于指示消费者进程下一个可用的装有产品的缓冲区。
3)现行工作缓冲区C:消费者进程正在使用的工作缓冲区。
(2)多个指针。
1)Nextg:用于指示消费者进程下一个可用的装有数据的缓冲区。
2)Nexti:用于指示生产者进程下一个可用的空缓冲区。
3)Current:用于指示进程正在使用的工作缓冲区。
由于使用缓冲可使生产者进程和消费者进程并行执行,相应地,指针Nexti和指针Nextg将不断地沿顺时针方向移动,在下列两种情况下需要保持两种进程同步的机制。
1)Nexti指针追上Nextg指针,即生产者进程速度大于消费者进程速度,没有空缓冲区,全部缓冲区已满。此时,需要阻塞生产者进程,等待消费者进程为生产者进程释放空缓冲区R。
2)Nextg指针追上Nexti指针,消费者进程速度大于生产者进程速度,全部缓冲已空。此时,需要阻塞消费者进程,等待生产者进程为消费者进程释放装有数据的缓冲区G。