我想为经典的Producer-Consumer交互实现环形缓冲区。将来,P和C都将作为数据处理任务中运行的永久线程来实现,图形用户界面将成为第三个线程,只用于显示实际数据,并通过用户交互协调数据处理的开始和停止。C很慢才能完全处理所有传入的数据,但只需要一点点和短的时间。因此,我只想分配几个P的MTU大小的环形缓冲区,但无论如何,如果C处理现有数据的速度太慢,那么可以松掉旧数据,而改用新的数据(覆盖策略)。
我在queue中读过QSemaphore示例,并认识到通过使用信号量的获取和发布,我只能实现丢弃策略,因为获取队列中指定的块会阻塞,直到没有空闲空间。
是否有任何与QSemaphore一起实现覆盖策略的方法,或者我只需要去实现另一种方法?
发布于 2021-10-16 07:24:12
我已经想出了这个解决方案。如果我们应该不惜任何代价将部分src数据推送到环形缓冲区(删除可能的新传入数据是可以的),那么我们应该在生产者部分使用acquire() --这将为我们提供丢弃策略。如果我们需要覆盖策略,我们应该在生产者中使用tryAcquire() -因此,在可能的第一时间,只有最新的数据将被推送到环形缓冲区。
https://stackoverflow.com/questions/69290115
复制相似问题