c++中的TBB concurrent_bounded队列和同步
TBB concurrent_bounded queue in C++ and synchronization
我使用TBB concurrent_bounded_queue,因为这个类允许我们使用pop,如果没有元素可用,则pop被阻塞。队列的默认大小是多少?我还在一本书中读到,而不是使用concurrent_bounded_queue使用parallel_while或管道,这些将如何帮助我们代替concurrent_bounded_queue ?有谁能举例说明如何使用paralle_while或pipeline在两个线程之间通过同步共享数据吗?
谢谢!
默认大小当然是0,即队列中没有元素。但你可能想知道默认容量(即边界)。TBB参考手册说
A concurrent_bounded_queue <…>添加指定容量的功能。默认容量使得队列实际上是无界的。
源代码检查(src/tbb/concurrent_queue.cpp)给出了默认初始化容量的以下公式:
my_capacity = size_t(-1)/(item_size>1 ? item_size : 2);
对于pipeline
或parallel_while
(注意后者已弃用),它们是算法,而不是容器,因此不能用于在两个线程之间共享数据。但是在某些情况下,使用pipeline
可以取代基于线程的设计。例如,一个简单的生产者-消费者场景可以被一个两阶段的管道取代,其中第一阶段产生一段数据并将其传递给第二阶段进行处理(消费)。
相关文章:
- boost::进程间消息队列引发错误
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Android NDK传感器向事件队列报告奇怪的间隔
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 松弛原子与无同步情况下的记忆连贯性
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 在一个读写器队列中,我可以用volatile替换原子吗
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 为什么我的多线程作业队列崩溃
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 使用"Task"函数指针队列定义作业管理器
- 在c++队列中使用pop和visit实现线程安全
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- Qt的事件循环线程是安全的还是原子的?处理"队列连接"时如何同步?
- 队列的同步问题
- 视觉提升 条件变量中的同步队列C++不通知其他线程上的等待类方法
- 在两个线程之间同步队列
- c++中的TBB concurrent_bounded队列和同步