首页 > 解决方案 > 大数据共享数组

问题描述

我有两个线程。第一个是从 USB 将数据写入大数组(主缓冲区)中。每次从 USB 获取新数据时,偏移量(写入偏移量)都会增加。在第二个线程中,有一个“读取偏移量”,当从主缓冲区中提取新数据时,它也会增长。

一个线程正在写入,下一个线程正在读取。

但是这个解决方案没有优化。我需要一个更大的阵列来满足我的不同要求。我需要动态行为来使用在两个或多个线程之间共享的内存。

我确信有很多有用的算法可以解决我的问题。

任何人都可以推荐其中一些,好吗?[C(++) 语言]

标签: c++

解决方案


我在 C++ 中做过类似的事情。我首先构建了一个缓冲区列表——一个空闲列表——,然后用我从malloc()or获得的两个空缓冲区填充它new。然后我的传入数据线程这样做了

  1. 如果列表中有一个空缓冲区,则将其从列表中取出并开始写入。malloc()如果此列表中没有缓冲区,我会从or中获得另一个缓冲区new

  2. 当活动缓冲区填满时,我将其放入队列并抓取另一个。

  3. 我的消费者线程,另一个,从队列中拉出缓冲区,做需要的事情,并将缓冲区放回空闲列表中。

该方案比您描述的环形缓冲区方案效果更好,因为它可以在需要时添加缓冲区。

当您将缓冲区放入队列或空闲列表或将它们取出时,您需要使用线程安全操作。为队列和空闲列表使用适当的线程安全标准库集合。

您也可以使用环形缓冲区,当它不够大时,可以使用realloc1.5 倍大小的新缓冲区并复制数据。


推荐阅读