В зависимости от используемого вами API потоков должны быть формы сигналов для передачи между потоками и способ ожидания такого сигнала.
Исходя из этого, когда поток завершается, он заставляет его ждать сигнала (фактически он спит и не использует никакого процессора).Затем какой-то другой поток может сохранить где-то рабочий элемент и дать сигнал спящему потоку проснуться.Пробужденный поток проверяет доступность рабочего элемента, обрабатывает его и возвращается в ожидании сигнала следующего элемента.
Это очень упрощенная версия подхода.(Для начала, что, если следующий рабочий элемент будет сохранен до завершения предыдущего?) Точная реализация во многом зависит от используемого вами API.Попытайтесь найти несколько сценариев «потребитель-производитель» для этого API, это должно дать вам достаточно информации для анализа.