Я разрабатываю программу (C++), которая во время выполнения запроса может использовать несколько потоков, некоторые из которых будут зависеть от других потоков, запущенных самим собой или другого потока в этом процессе запроса. Определение того, существует ли конкретный поток, зависит от конкретных параметров, передаваемых потоку, и это часть данных потоков в списке активных потоков. Индивидуальные потоки могут быстро завершаться, тогда как другие могут занимать много времени.
Чтобы предотвратить попытку изобретать колесо, существует ли какой-то алгоритм, шаблон или наилучшая практика для обработки маршалинга и ожидания нескольких взаимозависимых потоков?
Возможно, вам стоит взглянуть на фьючерсы и обещания, а также на интерфейс асинхронной оболочки на С++ 11.
Обещания позволяют получить результат.
Фьючерсы позволяют ждать результата.
Таким образом, вы можете выразить множество зависимостей вычислений между потоками, и поскольку каждый потребитель ждет должным образом для своего производителя (который сам может быть снова потребителем), во многих случаях зависимости сами определяют себя автоматически, если вы принимаете забота.
Больше информации:
Вопрос о фьючерсах и обещаниях
Очень хорошее объяснение
Блог-запись о "сломанных обещаниях" (- Bartosz Milewski)