问题标签 [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 投票
1 回答
574 浏览

c - 用于mpeg-ts的具有恒定时间延迟的c循环缓冲区

你能说我在 linux 上用 c 语言在输入和输出之间实现具有恒定时间延迟的循环缓冲区的最佳方法吗?我在线程中写入缓冲区并在另一个线程中读取它。我需要保存读写之间的恒定时间差,并且写入流具有可变比特率。现在我每隔几个数据包添加时间戳以同步它们,并且我从另一个线程获取时间戳,该线程每 1 毫秒使用一次 clock_gettime。

0 投票
0 回答
663 浏览

c - 如何解决linux内核中/proc文件的读取线程和写入线程之间的冲突?

/proc我有一个 Linux 内核模块,它在目录中创建一个文件。我的模块具有读取或写入文件时调用的读取函数和写入函数。它有一个循环缓冲区来保存具有许多缓冲区条目的数据。

写入文件时,模块会将数据写入循环缓冲区,然后在读取/proc文件时读取该缓冲区。

当有 2 个线程时,一个线程可能正在写入缓冲区条目,同时一个读取线程正在从该缓冲区条目读取。

会不会有冲突?如何解决读线程和写线程之间的冲突?

0 投票
1 回答
236 浏览

c - 使用 pthreads / cond_signal / cond_wait 时如何考虑循环缓冲区大小为 1?

我正在尝试实现一个程序,该程序使用线程从文件中读取数据并写入任意大小的缓冲区,而另外两个线程从该缓冲区读取信息。一切正常,除了当我指定缓冲区大小为 1 时。当我这样做时,一切都锁定了。我或多或少地从这里改编了经典的“消费者/生产者”示例这是我的代码:

我正在使用的结构:

我的“添加到缓冲区”线程

这是输出的样子:

然后它就挂了。很明显,它永远不会超出第一个 while 循环。它适用于任何其他尺寸,但不适用于 1。对此实施修复的最佳方法是什么?如果这有帮助,这是我的“从缓冲区获取”方法。

我确信有一个相当简单的解决方法来处理这种边缘情况,但我似乎无法弄清楚。我们欢迎所有的建议!

编辑:我也像这样初始化我的缓冲区:

0 投票
2 回答
574 浏览

ios - 有没有办法创建一个循环文件​​存储?就像 linux 中的 syslog

在我的 iOS 应用程序中,我想存储一些从远程服务器获取的消息。但是,一旦我有 N 条消息,我想清除这些消息,而不是永远存储这些消息;即,如果我的 N 配置为 10,我想存储 10 条消息,并且在第 11 条消息到达时,我想删除第 1 条消息。

在 iOS 中有没有标准的方法来做到这一点?我还没有编写代码来保存消息,所以选择任何保存方法对我来说都很好。

0 投票
1 回答
5661 浏览

circular-buffer - 为什么环形缓冲区大小必须是 2 的幂?

为什么环形缓冲区大小必须是 2 的幂?

0 投票
2 回答
148 浏览

arrays - 循环缓冲区(开始值被删除,会发生什么?)

我试图让我的头脑围绕循环/环形缓冲区,我有点卡在一个问题上。

如果我有一个线性队列,如下所示:

66、20、30、40、19,空槽
0 1 2 3 4 5

正面:0(66),背面:5,长度:5

如果一个值被删除(考虑到 0 是第一个被添加的,我相信 0(即 66)将被删除。

我的问题:那么 20 会成为队列中的第一个吗?之后的布局会如何?有什么东西会移动吗,例如索引/指针,或者任何类似的东西?

谢谢。

0 投票
0 回答
81 浏览

.net - 在 .NET 中,如何创建具有最快的 Write() 方法的流

我有一个应用程序将消息记录到两个文件中,并通过套接字发送它们。一个文件获得二进制表示,另一个获得人类可读的等价物。消息类具有将消息的人类可读版本输出到流的功能。二进制表示在消息类中以字节 [] 的形式提供。

我想最大化传出消息率,所以我觉得日志记录操作应该尽可能快。

一种可能的方法是简单地创建一个任务来执行每个日志记录操作并将对消息实例的引用传递给每个任务。对我来说,这种方法的问题是消息实例是一个池对象,并且必须在某个时候返回到池中。由于多个线程持有对消息对象的引用,因此很难协调将消息对象返回到池中,以便最后一个使用它的线程实际执行返回。另外,我不想在每次需要发送消息时创建任务(或任何对象)。

我相信 Write() 的最快实现将具有以下两个特征: 1. 将在与发送消息的线程不同的线程上处理将数据写入文件的工作。2. 不会​​分配任何额外的对象(因此没有机会为 GC 暂停)。由于不希望分配新内存,Write() 方法可以阻塞,直到有足够的空间来接受写入消息。

我正在考虑在这里使用类似 CircularBuffer/CircularStream 的东西:http: //circularbuffer.codeplex.com/(尽管当缓冲区已满时此实现不会阻塞)

你觉得呢?你有没有什么想法?

0 投票
1 回答
228 浏览

c - 减轻环形缓冲区中轮询效应的策略

我在 1Reader 线程/1Writer 线程设置中使用规范的环形缓冲区实现。

由于读取器在缓冲区为空时循环[写入器在缓冲区满时循环]并不断轮询控制变量,因此我调用 pthread_yield(在我的情况下只是 sched_yield 的包装器)以优先考虑系统中的其他线程. 我没有使用任何互斥锁,因为正常运行不需要它。

有没有更好的方法来减轻轮询效应(又名 CPU 燃烧)?我在考虑 pthread 的条件变量——因为我主要在没有数据 [没有空间] 时阻塞线程——但我担心会引入开销。

谢谢

0 投票
1 回答
444 浏览

c - 线程缓冲区:如何防止客户端之间的竞争并让客户端和服务器同时在缓冲区上工作

我做了一个程序,它有几个线程客户端,可以将信息存储到循环缓冲区中;服务器可以从循环缓冲区中读取(和“删除”)消息。我遇到的问题是缓冲区已满;当前正在写入缓冲区的客户端必须释放互斥锁(服务器会从缓冲区中删除所有数据),但是当释放互斥锁时,客户端竞争和已经很忙的客户端不一定是第一个继续传输的客户端;所以他的信息被混淆了。有谁知道如何解决这个问题?或者你有更好的方法来做这件事的建议。最终,我想创建一个多线程 tcp 服务器,将消息存储在缓冲区中,然后由服务器重新传输给所有客户端,这样你就知道我要用它做什么了。

0 投票
1 回答
814 浏览

c - 当缓冲区小于生产者的输入时,生产者/消费者似乎陷入僵局

我制作了一个循环缓冲区,多个客户端写入(最后我希望他们将不同大小的消息)写入缓冲区。服务器将它们读出。它基于消费者/生产者问题中的代码:

它主要在缓冲区大于单个客户端的消息时起作用(通过buffer_size增大,例如 16)。然而,当我把它变小时,它似乎陷入僵局,即使经过大量研究,我也无法弄清楚为什么。当我在调试器中运行代码时,代码似乎停止运行

为什么代码在这里停顿,如何防止它停顿?