C++ - 在线程之间传递数据
C++ - Passing data between threads
我有一个由 4 个线程组成的线程池:t1、t2、t3 和 t4。它们同时运行,但来自 t3 和 t4 的输入取决于来自 t2 的输出。如何实现消息队列,让 t2 完成后将输出数据发送到 t3 和 t4 进行处理?我尝试使用锁定机制实现消息队列,但似乎锁定非常昂贵。是否有在线程之间传递数据的无锁机制?我在Visual Studio 2010中使用boost::thread。
Boost 有一个无锁队列:http://www.boost.org/doc/libs/1_56_0/doc/html/lockfree.html。
你可以考虑 tbb。它提供了广泛的并行概念,包括concurrent_queue
、concurrent_bounded_queue
(用于等待)、pipeline
、flow::graph
。前两个在 MS VS 2010 中的 ppl 中也可用。
相关文章:
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 线程之间的实时数据共享
- std::weak_ptr 和相应的 std::shared_ptr 之间是否存在数据竞争?
- 在C++事务之间存储大量字符数据的有效方法
- 如何在进程之间共享大量数据而不重复?(国际刑罚委员会)
- 简单使用 std::atomic 在两个线程之间共享数据
- 在 EXE/DLL 之间传递数据
- 由 std::shared_ptr 向量指向的数据之间的线程同步
- 在压缩和未压缩数据之间切换
- 尝试从每个预期数据之间有多个空间的文件中读取和存储数据
- 如何在指定数据之间将数据从一个向量获取到另一个向量
- 使用Isringstream和struct/vector在给定的数据之间建立连接
- 结构数据D = {0}和结构数据D = {}之间是否存在任何区别
- openMP 的目标数据和目标数据之间的区别?
- 代码是否被视为可移植可执行文件格式中的初始化数据,初始化数据和单元化数据之间的确切区别是什么
- libpcap 数据包结果与使用 C++ 的 BSD 套接字接收数据之间的差异