gpt4 book ai didi

c++ - 单生产者多消费者循环缓冲区

转载 作者:行者123 更新时间:2023-11-30 05:32:22 24 4
gpt4 key购买 nike

在我当前的应用程序中,我通过光谱仪接收光谱数据。该数据累积一秒钟,然后放入循环缓冲区。现在我有一个消费者,他从缓冲区弹出条目,然后将所有内容保存到磁盘。好的,所有这些都有效。现在我需要做的是添加另一个消费者,在保存的同时,对光谱进行一些处理。所以我有两个消费者需要完全相同的数据(注意:他们只读取而不修改)。好的,但这不起作用,因为如果其中一个消费者弹出缓冲区的一个条目,它就消失了,所以另一个就不会收到它。我想这个问题最简单的解决方案是给每个消费者它自己的循环缓冲区。很好,但唯一的问题是:数据条目很大。一个条目的最大大小约为 80MB,因此为了节省内存,最好不要让相同的数据出现两次。有没有更好的解决方案?

注意:我使用的是循环缓冲区,因此可以确保缓冲区有一个增长的限制。

最佳答案

在缓冲区中保留两个不同的尾指针,每个消费者一个。当生产者更新队列时,使用最远的尾指针(滞后的尾指针)检查缓冲区是否已满。消费者可以使用自己的尾指针来检查缓冲区是否为空。这样我们就得到了一个无锁缓冲区,并且没有数据复制。

请参阅 disruptor exchange 的实现,了解有关使用此解决方案提高性能的讨论。

关于c++ - 单生产者多消费者循环缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35151150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com