Я хотел бы выполнить обход дерева после заказа в C ++. Дерево может быть настолько глубоким, что я не могу использовать рекурсию (оно исчерпывает стек). Вместо этого я создаю std::stack<...>
, который помещает все в кучу и перебирает дерево в цикле while, а не с помощью вызовов функций. Это прекрасно работает.
Теперь я хотел бы распараллелить весь процесс, используя TBB. Я думал о создании task_group
на каждом узле и запуске одинакового functor
на каждом из его дочерних элементов. Но мне приходит в голову, что это столкнется с той же проблемой с глубиной дерева, что и раньше: выполнение functor
на каждом узле самого глубокого пути будет поглощать что-то из стека, пока все не закончится.
Есть ли выход из этой проблемы? Или я представляю себе все это; Есть ли какая-то магия за task_group::wait()
, которая позволяет избежать этой проблемы?