Почему Intel TBB не предоставляет условные переменные, такие как повышение? - PullRequest
2 голосов
/ 12 апреля 2011

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

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

1 Ответ

4 голосов
/ 12 апреля 2011

Используете ли вы очень старый TBB?

Наличие задач "ждать" - это то, что TBB плохо обрабатывал в прошлом, но текущие новости TBB содержат это:

Класс потоков ISO C ++ - Тонкая переносимая оболочка вокруг потоков ОС.Это точное приближение потока класса ISO C ++ 200x (раздел 30.2 http://www.open -std.org / jtc1 / sc22 / wg21 / docs / paper / 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)

...