TBB concurrent_bounded队列在C ++和同步

时间:2011-07-18 09:17:48

标签: c++ tbb

我正在使用TBB concurrent_bounded_queue,因为这个类允许我们使用pop,如果没有元素可用则阻塞。队列的默认大小是多少?我也读了一本书而不是使用concurrent_bounded_queue使用parallel_while或者管道,这些如何帮助我们代替concurrent_bounded队列?任何人都可以举例说明如何使用paralle_while或管道来同步两个线程之间的数据共享?

谢谢!

1 个答案:

答案 0 :(得分:1)

默认大小当然为零,即队列中没有元素。但您可能想知道默认容量(即绑定)。 TBB Reference manual表示

  

concurrent_bounded_queue< ...>添加了指定容量的功能。默认容量使队列几乎无限制。

源代码检查(src / tbb / concurrent_queue.cpp)为容量的默认初始化提供了以下公式:

    my_capacity = size_t(-1)/(item_size>1 ? item_size : 2); 

至于pipelineparallel_while(注意后者已被弃用),这些是算法,而不是容器,因此不能用于在两个线程之间共享数据。但在某些情况下,使用pipeline可以取代基于线程的设计。例如,一个简单的生产者 - 消费者场景可以用两阶段管道代替,其中第一阶段产生一段数据并将其传递给第二阶段以进行处理(消费)。