问题标签 [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.
iteration - 如何在没有条件的情况下向后迭代循环缓冲区?
使用余数运算符,在不使用条件的情况下向前迭代循环缓冲区很容易......
iterator = (iterator + 1) % buffer_size;
我一生都无法弄清楚反向操作,向后迭代。
c++ - 如何在 C/C++ 中编写一个简单的整数循环缓冲区?
我看到很多用于实现循环缓冲区的模板和复杂的数据结构。
如何为 5 个数字编写一个简单的整数循环缓冲区?
我在想C是最直接的?
谢谢。
file - 以循环缓冲区方式读取和写入文件
我需要使文件表现为循环缓冲区。我必须从一个线程写入数据。从另一个线程我从文件中读取。但是文件的大小是固定的。
任何想法?
c++ - 线程间共享数据数组-C++
我知道已经回答了类似的问题,但我问这个问题是因为它们并没有完全给出我想知道的内容。这是关于线程之间的同步。我的项目的想法是我们从数据采集卡中获取数据,并在数据采集过程中绘制和分析数据。到目前为止,我只有一个线程上的数据采集类和另一个线程上的绘图类。数据采集类将数据存储在全局循环缓冲区中,绘图类从全局缓冲区复制数据并进行一些绘图处理(减少数据点等)。这就是我认为所谓的(单一)生产者-(单一)消费者问题。
现在,我想在另一个分析数据的线程上介绍另一个类。然后,我将有一个生产者和两个消费者。我想施加以下条件:
- 两个阅读器共享相同的数据集。即,每个生产的项目必须由两个阅读器使用,而不是仅由其中一个阅读器使用。
- 当缓冲区已满时,数据采集类将覆盖全局缓冲区。当读取器由于数据采集类覆盖缓冲区而丢失数据时,必须检测到这一点,理想情况下,将其保存在日志中(例如,读取器遗漏了哪些数据部分) )。
- 分析类的计算可能很密集。为此,我可能需要在分析类中使用更大的数据缓冲区。
我处理第一部分(单个生产者和单个消费者)的方式似乎并没有直接扩展到第二部分(单个生产者和两个消费者)的情况。我想知道我应该如何进行。我使用 C++ 和 Qt 进行线程处理,因为我使用 Qt 作为 GUI。但是,解决方案不一定必须使用 Qt。但是,如果可能,将不胜感激示例代码或伪代码。我在这里找到了与我的问题类似的线程)。建议使用 boost::interprocess。然而,由于我以前从未使用过 Boost 库,而且虽然我已经阅读了有关 boost::interprocess 的文档,但它看起来太复杂了,无法弄清楚我自己。
非常感谢!
大辅
emacs - emacs 中的环叫什么?
与 Windows 风格的自我解释复制/剪切/粘贴命令不同,我无法理解emacs 中的环概念。
由于我不经常在 emacs 中编程,我可能没有意识到环功能的价值。你能告诉我emacs中什么叫ring以及如何使用它吗?
c++ - 以无符号为模的数组环绕
我正在尝试为整数实现一个滞后的斐波那契伪随机数生成器,直到某个最大值。它维护一个值数组
并使用以下函数返回下一个值
实际上,values
应该是一个始终满的简单环形缓冲区。减法和模数应该将索引环绕到数组的末尾。SIZE
应始终至少为 55,但我想四舍五入到 64 以加快模数。
但显然,我的模计算错误,我不知道如何解决它们。将索引类型更改为int
不会改善情况。
(PS:是的,static
数据风格不好,但我希望这对于 C 和 C++ 程序员来说都是可读的,因为它适用于两种语言。)
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,因此失去价值。
基本上,这是作家必须修改读者的经典问题,导致竞争条件。如果我每次访问它时都没有真正阻止整个列表,我想不出一种方法来防止这种情况发生。我错过了什么??
qt - Qt 和 Boost 循环缓冲区
我正在尝试将 boost 循环缓冲区包含到我的项目中。我使用 macports 在我的计算机上安装了 boost。不确定要为 boost 库包含什么库,但我已经包含了头文件。下面是我的 cmake 文件。
c - c中的圆形阵列用于延迟线
我正在尝试在线查找任何资源以在 c 中编程延迟线。
我尝试在这里实现这个
https://ccrma.stanford.edu/~jos/doppler/Variable_Delay_Line_Software.html。
问题在于它所说的
编译器会抛出错误,因为 wptr 是指针而不是整数。
有人可以向我指出一个编译器友好示例的示例吗?