как реализовать набор постоянных согласованных рабочих потоков - PullRequest
0 голосов
/ 29 мая 2018

Я хочу повторно использовать набор рабочих потоков.Каждый рабочий поток выполняет независимую работу, но он должен запускать и останавливать обработку как скоординированная команда.Мне нужны эффективные средства для блокировки каждого рабочего потока, пока основной поток не сообщит им 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

Мой вопрос заключается в том, как лучше всего выполнить эту сигнализацию и синхронизацию.Я не спрашиваю о том, как разделить работу или переместить работу в или из каждого потока;достаточно сказать, что потоки не взаимодействуют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...