TBB concurrent_bound очередь в C ++ и синхронизация - PullRequest
1 голос
/ 18 июля 2011

Я использую TBB concurrent_bounded_queue, так как этот класс позволяет нам использовать pop, который блокируется, если нет доступных элементов.Каков размер очереди по умолчанию?Я также читаю в книге вместо использования concurrent_bounded_queue, использующего параллельный_текст или конвейер, как они помогут нам вместо очереди concurrent_bounded?Может ли кто-нибудь из PLS привести пример использования paralle_ Между тем или конвейера для обмена данными между двумя потоками при синхронизации?

Спасибо!

1 Ответ

1 голос
/ 21 июля 2011

Размер по умолчанию, конечно, равен нулю, то есть нет элементов в очереди. Но вы, вероятно, хотите знать емкость по умолчанию (т.е. предел). Справочное руководство TBB гласит, что

concurrent_bounded_queue <...> добавляет возможность указать емкость. Емкость по умолчанию делает очередь практически неограниченной.

А проверка исходного кода (src / tbb / concurrent_queue.cpp) дает следующую формулу для инициализации емкости по умолчанию:

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

Что касается pipeline или parallel_while (обратите внимание, что последний устарел), это алгоритмы, а не контейнеры, и поэтому нельзя использовать для совместного использования данных между двумя потоками. Но в некоторых случаях использование pipeline может заменить дизайн на основе потоков. Например, простой сценарий «производитель-потребитель» может быть заменен двухэтапным конвейером, в котором первый этап создает фрагмент данных и передает его на второй этап для обработки (потребления).

...