c++ - 一个线程提供数据,多个线程消耗数据的最快实现

标签 c++ linux multithreading

我有很多数据要分发给许多不同的线程。此数据来自单个线程。消费线程可以同时安全地访问容器。

数据需要每隔 delta 秒(50ms < delta < 1)合并到容器中,在此期间需要锁定消费线程,但不要阻塞。类似地,当数据生产者想要合并数据时,它应该等到所有读取线程完成(这应该很快),但没有其他人应该开始读取,因为更新需要尽快发生。

我在 Linux 上工作(平台特定的解决方案非常好/预期)并且我关心每一毫秒。我应该使用什么样的锁定机制,或者是否有更好的模型来解决这个问题?

最佳答案

如果只有一个数据生产者线程并且不考虑内存,您可能需要考虑使用合并和交换算法。

在其中,写入线程创建数据结构的拷贝,同时读取者继续使用原始数据结构,合并新的更改,然后在互斥锁或临界区(或读取器/写入器锁)中执行两个结构的交换.如果你的Unix platform supports interlocked exchange as an atomic operation ,您可以执行无锁交换,通过它们的实现最大化读取吞吐量。

关于c++ - 一个线程提供数据,多个线程消耗数据的最快实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563409/

相关文章:

c++ - 在 win32 中发送十六进制值不能像 C++ 代码那样工作

linux - 我该如何在 Windows CMD 上执行此操作?

java - java中的缓冲输入文件和并行处理

c++ - 虚幻引擎 4.16,C++ 包含头文件

c++ - 为什么QStringLiteral返回乱码字符串

c++ - 带有 std::thread 的 MVSE12 中的错误 C2248

linux - 使 VS Code 编辑器 Ctrl+Tab 循环选项卡的顺序与屏幕上显示的顺序相同?

linux - 如何将当前路径复制到剪贴板?

c# - 使用 async/await 是否会创建一个新线程?

java - 如果池已满则忽略线程