假设我有两个缓冲区。生产者填充缓冲区#1,然后填充缓冲区#2。消费者一次消耗一个缓冲区,而且非常慢。当它正在消耗缓冲区 #1 时,生产者准备填充另一个缓冲区,但它们都已满,消费者尚未完成 #1。所以,生产者等待。
我希望生产者更新“空闲”缓冲区,而不是等待。也就是说,当消费者使用缓冲区#1 时,生产者应该在缓冲区#2 准备好后立即将新数据写入缓冲区(“旧”数据被覆盖并丢失)。如果消费者还没有完成#1,而生产者有更多数据要写入,它应该 再次写入#2,依此类推。当消费者最终消费完#1中的所有数据时,它应该立即开始消费缓冲区#2中新写入的数据,生产者应该继续更新#1。
(假设生产者正在高速实时获取视频帧,而消费者正在缓慢地处理它们;消费者不介意跳过某些帧,但它必须始终处理获取的最后一帧。相反,生产者不能减速也不等待,因为它必须获取每一帧)。
有没有办法用信号量做这种事情?这是一个众所周知的并发问题吗?而且,以防万一,是否可以将此问题扩展到 n > 2 个缓冲区?
谢谢!