Подобно механизму условного сигнала, я хочу, чтобы одна задача ждала, пока не будет получен какой-то сигнал или какая-то переменная не станет истинной. Boost lib предоставляет этот механизм, а TBB — нет.
Как реализовать этот случай в ТББ?
Подобно механизму условного сигнала, я хочу, чтобы одна задача ждала, пока не будет получен какой-то сигнал или какая-то переменная не станет истинной. Boost lib предоставляет этот механизм, а TBB — нет.
Как реализовать этот случай в ТББ?
Вы используете очень старый TBB?
Раньше TBB не справлялся с «ожиданием» задач, но текущий TBB новости содержит это:
Класс потоков ISO C++ — тонкая переносимая оболочка для потоков ОС. Это близкое приближение к потоку класса ISO C++ 200x (раздел 30.2 документа http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2691.pdf). Теперь TBB позволяет вам выбрать, что лучше всего подходит для вашей ситуации — на основе задач или потоков. Потоки обычно лучше, чем задачи, когда «работа» действительно требует больше ожидания, чем вычисление, например:
* GUI, I/O or network interface threads. * Threads that need to wait on external events. * Programs that previously needed to use both native threads and Intel® TBB tasks.
т.е. они признают, что параллелизм задач TBB не является универсальной панацеей, и вам иногда нужно что-то более похожее на «традиционную» модель потоковой передачи для ввода-вывода. И действительно, если вы посмотрите последнее справочное руководство вы обнаружите, что TBB теперь содержит условные переменные! (См. раздел 8.4)