问题标签 [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 回答
4527 浏览

iteration - 如何在没有条件的情况下向后迭代循环缓冲区?

使用余数运算符,在不使用条件的情况下向前迭代循环缓冲区很容易......

iterator = (iterator + 1) % buffer_size;

我一生都无法弄清楚反向操作,向后迭代。

0 投票
4 回答
42703 浏览

c++ - 如何在 C/C++ 中编写一个简单的整数循环缓冲区?

我看到很多用于实现循环缓冲区的模板和复杂的数据结构。

如何为 5 个数字编写一个简单的整数循环缓冲区?

我在想C是最直接的?

谢谢。

0 投票
3 回答
1290 浏览

file - 以循环缓冲区方式读取和写入文件

我需要使文件表现为循环缓冲区。我必须从一个线程写入数据。从另一个线程我从文件中读取。但是文件的大小是固定的。

任何想法?

0 投票
2 回答
3302 浏览

c++ - 线程间共享数据数组-C++

我知道已经回答了类似的问题,但我问这个问题是因为它们并没有完全给出我想知道的内容。这是关于线程之间的同步。我的项目的想法是我们从数据采集卡中获取数据,并在数据采集过程中绘制和分析数据。到目前为止,我只有一个线程上的数据采集类和另一个线程上的绘图类。数据采集​​类将数据存储在全局循环缓冲区中,绘图类从全局缓冲区复制数据并进行一些绘图处理(减少数据点等)。这就是我认为所谓的(单一)生产者-(单一)消费者问题。

现在,我想在另一个分析数据的线程上介绍另一个类。然后,我将有一个生产者和两个消费者。我想施加以下条件:

  1. 两个阅读器共享相同的数据集。即,每个生产的项目必须由两个阅读器使用,而不是仅由其中一个阅读器使用。
  2. 当缓冲区已满时,数据采集类将覆盖全局缓冲区。当读取器由于数据采集类覆盖缓冲区而丢失数据时,必须检测到这一点,理想情况下,将其保存在日志中(例如,读取器遗漏了哪些数据部分) )。
  3. 分析类的计算可能很密集。为此,我可能需要在分析类中使用更大的数据缓冲区。

我处理第一部分(单个生产者和单个消费者)的方式似乎并没有直接扩展到第二部分(单个生产者和两个消费者)的情况。我想知道我应该如何进行。我使用 C++ 和 Qt 进行线程处理,因为我使用 Qt 作为 GUI。但是,解决方案不一定必须使用 Qt。但是,如果可能,将不胜感激示例代码或伪代码。我在这里找到了与我的问题类似的线程)。建议使用 boost::interprocess。然而,由于我以前从未使用过 Boost 库,而且虽然我已经阅读了有关 boost::interprocess 的文档,但它看起来太复杂了,无法弄清楚我自己。

非常感谢!

大辅

0 投票
5 回答
466 浏览

emacs - emacs 中的环叫什么?

与 Windows 风格的自我解释复制/剪切/粘贴命令不同,我无法理解emacs 中的概念。

由于我不经常在 emacs 中编程,我可能没有意识到环功能的价值。你能告诉我emacs中什么叫ring以及如何使用它吗?

0 投票
3 回答
5935 浏览

c++ - 以无符号为模的数组环绕

我正在尝试为整数实现一个滞后的斐波那契伪随机数生成器,直到某个最大值。它维护一个值数组

并使用以下函数返回下一个值

实际上,values应该是一个始终满的简单环形缓冲区。减法和模数应该将索引环绕到数组的末尾。SIZE应始终至少为 55,但我想四舍五入到 64 以加快模数。

但显然,我的模计算错误,我不知道如何解决它们。将索引类型更改为int不会改善情况。

(PS:是的,static数据风格不好,但我希望这对于 C 和 C++ 程序员来说都是可读的,因为它适用于两种语言。)

0 投票
14 回答
108659 浏览

python - 有效的循环缓冲区?

我想在 python 中创建一个有效的循环缓冲区(目标是取缓冲区中整数值的平均值)。

这是使用列表收集值的有效方法吗?

什么会更有效(为什么)?

0 投票
3 回答
5809 浏览

c++ - 覆盖最旧数据的 C /C++ 无锁(或非阻塞)环形缓冲区?

我正在尝试找到一种方法来制作无锁或非阻塞方式来为单个消费者/单个消费者创建一个环形缓冲区,这将覆盖缓冲区中最旧的数据。如果缓冲区已满,我已经阅读了很多无锁算法,当您“返回 false”时它们会起作用——即,不要添加;但是当您需要覆盖最旧的数据时,我什至找不到讨​​论如何执行此操作的伪代码。

我正在使用 GCC 4.1.2(工作限制,我无法升级版本......)并且我有 Boost 库,过去我制作了自己的 Atomic< T > 变量类型,它非常接近于upcomming 规范(它并不完美,但它是线程安全的并且可以满足我的需求)。

当我想到它时,我认为使用这些原子应该真正解决这个问题。关于我在想什么的一些粗略的伪代码:

据我所知,这里没有死锁情况,所以我们可以避免这种情况(如果我上面的实现即使在伪代码级别上也是错误的,那么建设性的批评总是值得赞赏的)。但是,我能找到的 BIG 比赛条件是:

让我们假设缓冲区已满。即writeIndex +1 = readIndex;(1) 发生,就像调用 consumer 一样。and is true (4) is false, 所以我们移动到从缓冲区读取 (5) 发生了,并且 readIndex 提前了一个(所以实际上缓冲区中的空间 (2) 发生了,提前 readIndex AGAIN,因此失去价值。

基本上,这是作家必须修改读者的经典问题,导致竞争条件。如果我每次访问它时都没有真正阻止整个列表,我想不出一种方法来防止这种情况发生。我错过了什么??

0 投票
1 回答
1761 浏览

qt - Qt 和 Boost 循环缓冲区

我正在尝试将 boost 循环缓冲区包含到我的项目中。我使用 macports 在我的计算机上安装了 boost。不确定要为 boost 库包含什么库,但我已经包含了头文件。下面是我的 cmake 文件。

0 投票
2 回答
1557 浏览

c - c中的圆形阵列用于延迟线

我正在尝试在线查找任何资源以在 c 中编程延迟线。

我尝试在这里实现这个

https://ccrma.stanford.edu/~jos/doppler/Variable_Delay_Line_Software.html

问题在于它所说的

编译器会抛出错误,因为 wptr 是指针而不是整数。

有人可以向我指出一个编译器友好示例的示例吗?