c - 同步两个线程

标签 c multithreading synchronization

有两个线程data_collect_threaddata_process_thread

data_collect_thread 收集数据并将数据推送到队列中,这比从队列中取出数据并处理数据的 data_process_thread 快 4 倍。

在这种情况下,一段时间后,由于与将数据推送到队列相比,出队速度较慢,堆会溢出。

我无法在 data_collect_thread 中等待 data_process_thread 处理数据。我需要获取实时数据,不能有任何遗漏。

请建议一种算法来避免此问题?

更多详细信息:

队列是一个双向链表,所以我需要在堆中分配内存并将其推送到队列中。出队后,内存被释放。

最佳答案

这个问题太宽泛,无法给出具体答案,但无论如何,我觉得很有趣。所以我会给出一些解决方案。

  • 购买速度四倍的计算机。
  • 创建更多data_process_thread实例。如果您有多个核心,则可能会起作用。
  • 优化 data_process_thread 的算法和/或代码。
  • 完全重写 data_process_thread 以在 GPU 上运行。
  • 创建具有负载均衡器的计算机集群。
  • 将队列假脱机到磁盘。如果数据流出现一些暂停,可能会起作用。

我可能会补充一点,如果你对问题添加足够的约束,它可能会变得无法解决。

关于c - 同步两个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59944770/

相关文章:

c++ - 将 char 设置为 '\0' 会泄漏内存吗?

c - 为什么我不能写入文件 mmaped

c - 如何检查/测试字符串是静态还是动态并且可以编辑

multithreading - 具有分布式后台工作的 Azure Web 角色

java - 更喜欢 synchronized 而不是 volatile

c - 函数从右侧将 count 个字符从源字符串传输到目标字符串

c# - 从后台线程捕获异常

将 select 与线程与 TCP C 程序结合起来

java - 我将如何在 Java 中实现 Go 的无缓冲 channel ?

java - 为 NavigableMap 编写同步线程安全包装器