У меня есть сценарий, для которого я пытаюсь найти наилучший подход к синхронизации. Предположим, что std :: thread в C++ 11 присутствует, поэтому не нужно беспокоиться о различиях между различными библиотеками потоков и т. Д.Синхронизация рабочих потоков
Сценарий это. Thread a, основной поток, хочет раздавать задания на кучу рабочих потоков. Затем, после выдачи окончательной инструкции на время, ему нужно дождаться, пока все потоки завершат свою работу. Мы не хотим присоединяться к ним, просто ждите, пока они закончат задание. Затем поток a должен проанализировать собранные данные из всех потоков, а затем отправить команды рабочим, чтобы снова начать процедуру.
Одним словом, это шаги.
- Нить a посылает команду x всем рабочим потокам.
- Нить в ожидании, пока все рабочие не закончат.
- Нить a обрабатывает.
- Вернуться к 1.
Что вы могли бы предложить, что я использую? Простые мьютексы? Переменные условия? Сочетание двух? Любые советы о том, как структурировать синхронизацию должны быть как можно более эффективными, будут оценены.
Барьеры оказались именно тем, что мне нужно. Спасибо! –
рад помочь. – didierc
@didierc Я думаю, 'n' - количество потоков. Но всегда лучше определить переменные. – user877329