Я реализую пул потоков. Работа, требуемая каждым потоком, составляет 1-10 секунд CPU, поэтому я рад, что у меня есть традиционный пул потоков с рабочими, или я счастлив создать новый поток для каждой единицы работы. Это не имеет значения.Подождите, пока закончится один из нескольких потоков?
Я хотел бы иметь некоторый путь к потоку основного управления, чтобы знать, когда один из N рабочих потоков заканчивает свою работу и готов к большему (или его времени для запуска другого). Я посмотрел на pthread_join и pthread_cond_wait. Кажется, что нет способа подождать одного из N. Поэтому я подумал о том, что главный поток имеет переменную, которую он использует, чтобы заснуть и заставить рабочих разбудить ее. Это, похоже, работает, если рабочие не умрут. Однако, если они умирают, между временем, когда рабочий просыпает контроллер и время, когда он умирает, есть окно, с которым я не хочу иметь дело.
Я смотрел TBB Intel, но он выглядит намного сложнее, чем мне нужно.
Есть ли простой эквивалент в PTHREADS для WaitForMultipleObjects в Microsoft Windows?
Я отметил это как C, пожалуйста, не стесняйтесь изменять его, если это не так. – 2010-11-24 07:45:19
Вы пробовали цикл (N) для pthread_join. http://opengroup.org/onlinepubs/007908799/xsh/pthread_join.html – 2010-11-24 07:45:44
Я согласен с small_ticket. Почему не работает цикл для n pthread_joins? – Jay 2010-11-24 08:01:14