LINUX.ORG.RU

Ф-ии синхронизации в posix


0

0

Подскажите, плиз посиксные аналоги виндовых ф-ий WaitForSingleObject и WaitForMultipleObjects.
У меня есть несколько потоков, созданных с помощью pthread_create и надо дождаться завершения всех потоков.
Извращаться с мютексами в данном случае не очень удобно.
В винде я данную задачу решал с помощью единственного вызова WaitForSingleObject.

★★★★

Насколько я понял тебе нужен phtread_join()
пример из Сиситемного програмирования на С++ для Unix Тернса Чана
(ожидается завершение всех неотсоединенных потоков процесса, а затем завершается текущий поток)

status int *rc, rval = 0;
thread_t tid;
if (!phtread_join(tid, &rc))
cout << "thread:" << (int)tid << ", exits, rc=" << (*rc) << endl;
pthread_exit((void*)&rval);

Надеюсь подойдет.

Bauron
()

Спасибо.
Я уже посмотрел эту ф-ию. Но в мане написано, что если с помощью pthread_join ждешь завершения потока X,
а завершается Y, то ф-ия возвращает ошибку. И я на это нарвался.
Возиться с проверками меня харило и я таки сделал ожидание на мютексах. Получается весьма просто. В цикле пытаешься лочить мютексы,
если мютекс уже залочен, то главный поток ждет, пока его разлочат. Таким макаром по на момент завершения цикла все потоки уже умерли.
Только еще наткнулся а грабли.
В линуксе после pthread_create поток сразу начинает работать и успевает залочить свой мютекс.
А в SunOS наоборот, вызовы прошли, уже идет ожидание завершения, а еще ни один поток не залочил свой мютекс.
Для лечения пришлось sleep на пару секунд поставить. Очевидно это связано с несколько различным шедулингом.
Ну и в варианте с мютексами pthread_detach влепил, чтобы ресурсы сами освобождались.
К счастью SunOS тоже поддерживает POSIX threads ;), а то тяжко бы мне пришлось.

Havoc ★★★★
() автор топика

Может не в тему, но вдруг поможет. Когдато извращаяся с потоками, я использовал для синхронизации семофор. Настраиваешь его, когда >0 блокирован. Перед созданием каждого потока его увеличиваешь. Получается величина семофора равна количеству потоков. А главный поток садится на ожидание разблокирования этого семорора. Понятно написал?

anonymous
()

Тоже выход ;)
Только я уже на мютексах сделал. Так как срок сдачи был вчера, то так оно и останется.
Спасибо.

Havoc ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.