Я не думаю, что это напрямую возможно из pthreads как такового, но вы можете обойти это довольно легко.
Используя API pthreads, вы можете использовать pthread_cond_wait
и друзей для настройки "условие "и ждать на нем.Когда поток собирается завершить работу, сигнализируйте условие для пробуждения ожидающего потока.
В качестве альтернативы, другой метод заключается в создании канала с pipe
, а когда поток собирается выйти, write
длятруба.Пусть основная нить ожидает на другом конце трубы либо с select
, poll
, epoll
, либо с вашим любимым вариантом.(Это также позволяет вам одновременно ожидать на других FD.)
Более новые версии Linux также включают в себя «eventfds» для того же, см. man eventfd
, но обратите внимание, что это добавлено только недавно.Обратите внимание, что это не POSIX, а только для Linux, и он доступен только в том случае, если вы достаточно современны.(2.6.22 или лучше.)
Мне лично всегда было интересно, почему этот API не был разработан для обработки этих вещей подобно дескрипторам файлов.Если бы это был я, они были бы "четными таблицами", и вы могли бы select
файлы, темы, таймеры ...