【问题标题】:C++ - Passing data between threadsC++ - 在线程之间传递数据
【发布时间】:2014-11-19 17:55:18
【问题描述】:

我有一个由 4 个线程组成的线程池:t1、t2、t3 和 t4。它们同时运行,但 t3 和 t4 的输入取决于 t2 的输出。我应该如何实现消息队列,以便在 t2 完成后,它将输出数据发送到 t3 和 t4 进行处理?我曾尝试使用锁定机制来实现消息队列,但似乎锁定相当昂贵。是否有在线程之间传递数据的无锁机制? 我在 Visual Studio 2010 中使用 boost::thread。

【问题讨论】:

标签: c++ multithreading


【解决方案1】:

【讨论】:

  • 嗨 Tomo,就我而言,t3 和 t4 都需要从 t2 获取输出数据。那么,我想知道谁将从消息队列中取出数据?应该是 t2 因为我们不确定 t3 还是 t4 会先完成吗?我的意思是每当 t2 使新数据入队时,它也会执行出队。
  • 是的,t2 应该将其输出放入队列。 T3 和 t4 应该定期检查队列中是否有任何要处理的内容。假设 t3 和 t4 确实有其他事情要做。如果不是(即他们唯一的工作是等待 t2 的输出并处理它),请忘记无锁队列并使用锁定解决方案。如果线程无论如何都需要等待,那么锁定成本不应该是您的问题。
【解决方案2】:

你可以考虑。它提供了广泛的并行概念,包括concurrent_queue、concurrent_bounded_queue(等待)、pipeline、flow::graph。前两个也可以在 MS VS 2010 中的 中找到。

【讨论】:

  • 您好安东,感谢您的回复!因为我的项目目前使用的是boost lib,所以我会更加关注boost。但如果我找不到任何解决方案,我也会看看 TBB。 :))
猜你喜欢
  • 2017-07-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多