问题标签 [circular-buffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
267 浏览

java - 后值在循环数组队列中无法正常工作

我有这个代码来添加:

但是当我想获得它的价值时,r它给了我比实际价值多一个的价值。此外,当我将值从一个数组复制到另一个数组时,会有一个值跳过一个值。我知道一切都与价值有关r = (r+1)%(q.length);,我已经研究了好几个小时,但无法弄清楚。将值分配给 q[r] 后,即使它只是第一个值,我尝试获取 r 应该在哪里的值它给了我 1,因为它是由公式增加的,但我无法弄清楚如何在不弄乱循环队列公式的情况下以不同的方式编写它。任何帮助将不胜感激。谢谢!

0 投票
0 回答
349 浏览

.net - 有没有人在 C# 中成功使用过 Disruptor 端口?

Disruptor已在 Java 世界中被证明是成功的,特别是负责组LMAX的证明。有没有人在交易场景或其他领域中成功使用过 .NET 端口(alpha、beta 或生产)?如果是这样,它是如何成功的,你为什么选择你做的端口?

0 投票
2 回答
1054 浏览

c - 圆形缓冲器与。锁定空闲堆栈以实现空闲列表

由于我一直在写一些多线程的代码,我想出了以下情况:

一个线程从内存池中声明一个资源单元,它处理它并将指向该数据的指针发送到另一个线程,以便使用循环缓冲区进行进一步操作(1R / 1W 情况)。

后者必须在处理完他收到的数据时通知前一个线程,以便可以回收内存。

我想知道将这个“Freelist”实现为另一个循环缓冲区 - 保存空闲资源的地址 - 还是选择无锁堆栈方式(在 x86-64 上实现 DCAS)是否更好 - 在性能方面。

一般来说,这两种不同方法的优缺点是什么?

0 投票
1 回答
565 浏览

circular-buffer - 硬件中的循环(环形或循环)缓冲区:微处理器中的可能用途?

众所周知,循环缓冲区是 TI 制造的 DSP 的有用部分,可用于高效的视频或声音数据处理。

在英特尔或 AMD 制造的 CPU 等通用型微处理器中是否有可能使用这些缓冲区?

0 投票
2 回答
3378 浏览

c++ - 迭代器,调用 end() 的结果值随着数据添加到循环缓冲区而变化

我今天早些时候发现boost::circular缓冲区的迭代器在多线程环境中的行为并不像我预期的那样。(尽管公平地说,它们的行为也与我在单线程程序中的想法不同)。

如果您调用buffer.begin()buffer.end()表示迭代器以用于循环特定的数据序列。如果将更多数据添加到circular_buffer. end()显然,如果您在数据更改后再次调用,您会期望得到不同的结果。但令人困惑的是您已经更改的迭代器对象的值。

有没有一种方法可以创建迭代器,使您可以处理循环缓冲区中的一组数据范围,并且即使在处理范围时将其他数据添加到缓冲区也不会更改它们的值?

如果没有,是否有可能适用的首选“非迭代器”模式,或者可能允许这样做的不同容器类?


更新以获取对 ronag 的更详细响应我正在寻找生产者消费者类型模型,并且 boost 文档中显示的有界缓冲区示例与我所需要的非常接近。除了以下两个例外。

  1. 我需要能够一次从缓冲区中读取多个数据元素,检查它们,这可能不是微不足道的,然后选择要从缓冲区中删除多少项目。

    假的例子:试图从一个字符串中处理两个单词 hello 和 world。

    读取 1,缓冲区包含 hel,不要从缓冲区中删除字符。-more 产生读取 2,缓冲区包含 hellowo,我发现 'hello' 删除 5 个字符,缓冲区现在有 wo -more 产生读取 3,缓冲区包含 world,处理 'world',删除另外 5 个字符。

  2. 读取时我不需要阻塞生产者线程,除非缓冲区已满。

0 投票
1 回答
2071 浏览

c - C 中的 2D 环形缓冲区

我编写了一个简单的环形缓冲区,它的环形大小为 5 来存储 A 类型的值。现在我必须扩展这个缓冲区来存储 B 类型的值(也是 5 个值)。

为了给出一个概述,我将读取索引和写入索引的变量定义为全局 volatile 和两个用于在环形缓冲区上读取和写入的函数。

我只需要:ring data = int read_ring_data()write_ring_data(int pass_new_data)

volatile 全局变量有助于控制读取和写入的位置。

我的问题是,有没有办法通过简单地重新调整尺寸来重用这些读写函数将其扩展到 2D 缓冲区?我该如何实施?

0 投票
1 回答
99 浏览

ios - 我想让它成为可能,当用户到达最后一张图像以显示它之后的第一个图像时,依此类推

我有一个UIScrollView不同的图像(大约 30 个)。我想让它成为可能,当用户到达最后一个图像以显示它之后的第一个图像时,依此类推。我想用第一张图片实现相同的功能(转到最后一张)。我想流畅地循环图像,用户甚至不会注意到他正在制作另一个循环。

0 投票
0 回答
555 浏览

boost - boost::interprocess 和 circular_buffer , C++

我的英语是近似的,对于给您带来的不便,我深表歉意。

我是 c++ 开发人员,我想在我的 boost::interprocess 程序中使用 boost::circular_buffer。

以下代码可以编译,但在启动时冻结:

非常感谢您的回答。

0 投票
4 回答
6199 浏览

python - ring buffer with numpy/ctypes

I'm developing a client which will receive the [EEG] data over tcp and write it to the ring buffer. I thought it can be very convenient to have the buffer as a ctypes or numpy array because it's possible to create a numpy 'view' to any location of such buffer and read/write/process the data without any copying operations. Or is it a bad idea in general?

However, I don't see how to implement a circular buffer of a fixed size this way. Suppose I have created a buffer object which is contiguous in memory. What is the best way to write the data when the end of the buffer is reached?

One possible way is to start overwriting the (already old) bytes from the begining when the write pointer reaches the end of the buffer array. Near the boundaries, however, the numpy view of some chunk (for processing) can't be created (or can it?) in this case, because some of it can still be located in the end of the buffer array while another already in its begining. I've read it's impossible to create such circular slices. How to solve this?

UPD: Thanks everybody for the answers. In case somebody also faces the same problem, here's the final code I've got.

0 投票
1 回答
4806 浏览

android - 视频录制到 Android 上的循环缓冲区

我正在寻找将连续视频捕获到 SD 卡上的循环缓冲区的最佳方法(如果有的话……),从而允许用户在事件发生后捕获事件。

标准的视频录制 API 允许您直接写入文件,当您达到限制(由用户设置,或 SD 卡的容量)时,您必须停止并重新开始录制。这将创建一个长达 2 秒的长窗口,其中不运行录制。这就是 DailyRoads Voyager 等现有应用程序已经在做的事情。为了最大程度地减少错过重要内容的机会,您可以将拆分时间设置为较长的​​时间,例如 10 分钟,但如果事件发生在此时间跨度的末尾附近,您会在开始时存储 9 分钟的空内容,从而浪费空间。

所以,我现在的想法如下:我将有一个大文件作为缓冲区。我将使用我找到的一些代码来捕获帧并将它们自己保存到文件中,最后环绕。当用户想要保留某些部分时,我将通过指向缓冲区开始和结束的指针来标记它。记录可以像以前一样继续,跳过标记为保留的区域。

在录制停止后,或者可能在后台线程上(取决于电话/卡速度)我会将标记的区域复制到另一个文件并删除覆盖保护。

主要问题,如果您不关心上面的细节:我似乎无法找到将单个帧转换为 Android SDK 中的视频文件的方法。是否可以?如果没有,是否有任何可用的库(可能是本机代码)可以做到这一点?

我真的不关心未压缩帧的大缓冲区,但导出的视频应该以 Android 友好的格式压缩。但是,如果有办法压缩缓冲区,我想听听。

谢谢你。