Общее правило в RAII (Resource Acquisition Is Initialization) заключается в том, что код, который получает ресурс, отвечает за его освобождение. Таким образом, ваш рабочий поток должен завершиться после освобождения всех ресурсов, которые он получил.
Общий стиль основной программы будет:
- Инициализировать то, что нужно инициализировать
- Внутри цикла "навсегда",
- Инициализировать рабочий поток.
- Пусть он выйдет на свободу.
- Основной поток может выполнять делегирование (передача задач работнику)
- Или просто подождите, пока рабочий закончит
- И повторите.
В качестве альтернативы, основной поток может по-прежнему выполняться в цикле навсегда, но распознает, когда в этот момент поступило делегируемое задание, инициализирует рабочий поток и назначает ему конкретную задачу. Это позволяет использовать столько рабочих потоков, сколько есть незавершенных делегируемых задач. Возможно, вам придется уменьшить число, чтобы у вас не было слишком много незавершенных задач.