Почему Intel TBB не предоставил условную переменную, такую ​​​​как повышение?

Подобно механизму условного сигнала, я хочу, чтобы одна задача ждала, пока не будет получен какой-то сигнал или какая-то переменная не станет истинной. Boost lib предоставляет этот механизм, а TBB — нет.

Как реализовать этот случай в ТББ?


person giggle    schedule 12.04.2011    source источник


Ответы (1)


Вы используете очень старый 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)

person timday    schedule 12.04.2011