1

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

谢谢!

4

1 回答 1

1

默认大小当然是零,即队列中没有元素。但您可能想知道默认容量(即界限)。TBB参考手册

concurrent_bounded_queue <...> 增加了指定容量的能力。默认容量使队列实际上是无界的。

并且源代码检查(src/tbb/concurrent_queue.cpp)给出了容量默认初始化的以下公式:

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

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

于 2011-07-20T20:31:04.703 回答