Я хочу повторно использовать набор рабочих потоков.Каждый рабочий поток выполняет независимую работу, но он должен запускать и останавливать обработку как скоординированная команда.Мне нужны эффективные средства для блокировки каждого рабочего потока, пока основной поток не сообщит им all , и эффективное средство для блокировки основного потока до тех пор, пока все рабочие потоки не будут завершены.
Для каждого куска работы потребуется всего несколько десятков микросекунд, поэтому обычный подход к созданию набора потоков и их объединению требует слишком много накладных расходов.
Псевдокод подобен следующему:
основной поток:
create N threads
forever
prepare new independent work for each thread
tell all N threads to run their part
wait for all N threads to complete their work
use results
типичный рабочий поток:
forever
wait to run
do my work
indicate to main my work is complete
Мой вопрос заключается в том, как лучше всего выполнить эту сигнализацию и синхронизацию.Я не спрашиваю о том, как разделить работу или переместить работу в или из каждого потока;достаточно сказать, что потоки не взаимодействуют.