У меня есть поток, который читает данные из файлового дескриптора, используя select()
заблокировать, пока данные не доступны.
Когда программа должна завершиться, мне нужно закрыть поток, однако он заблокирован при выборе.
Мой вопрос, это хорошая практика, чтобы уведомить поток о моих намерениях прекратить, закрыв дескриптор файла?
Есть ли лучший способ уведомить поток?
Я знаю, что всегда есть возможность использовать сигнал, однако я читал в некоторых местах, где pthreads
не очень хорошо работают вместе
Ну, вы можете использовать канал и добавить его в свой набор для чтения. Отправьте один байт на канал, когда поток должен завершиться.
Или есть тайм-аут на select
вызов, и когда это таймауты, проверяют на флаг завершения.
В дополнение к мягким путям, предложенным Иоахим, Есть также некоторые грубые подходы к
«прервать» блокировку select()
:
pthread_kill()
отправить сигнал на блокирующий поток и проверить (EINTR == errno)
после select()
обсуждаемыйpthread_cancel()
по идентификатору потока. select()
принадлежит множеству точек отмены по умолчанию.Оба метода должны рассматриваться как последнее решение для пересмотра.