Задать вопрос
@CommonX

Как корректно отслеживать завершение потоков?

В основном потоке создаем несколько потоков.
Как лучше отслеживать завершение всех созданных потоков с получением кода завершения?
После завершения одного из потоков нужно запустить новый и т.д. до определенного момента
pthread_join() не подходит
Возможно стоит использовать очередь сообщений?

OS: Linux
  • Вопрос задан
  • 192 просмотра
Подписаться 2 Средний 4 комментария
Решения вопроса 1
gbg
@gbg Куратор тега Linux
Любые ответы на любые вопросы
У функции pthread_join() есть неблокирующий вариант pthread_tryjoin_np()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
Предлагаемый POSIX вариант это join. Если не устраивает, то вы сами можете конструировать проверку завершения потоков теми средствами какие вам удобно и какие доступны.

Самое простое: выставляйте в потоке атомарный флаг завершения, в основном потоке проверяйте.
Если можно подождать какое-то время, то можно использовать условную переменную с таймером, а не флаг.
Можно и очередь, но, по моему, это как из пушки по воробьям. Для этой задачи не совсем то. С тем же успехом можно использовать pipe. Но зачем, когда это можно сделать проще.

Имейте ввиду, что join все равно надо вызвать, когда удостоверитесь, что поток завершен. Чтоб окончательно освободить все ресурсы потока. Или надо заранее делать поток отсоединенным (detach). Я бы использовал join, а не detach.
Ответ написан
Похоже вам нужен пул потоков
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы