Завершение заблокированного потока pthreads

У меня есть поток, который читает данные из файлового дескриптора, используя select() заблокировать, пока данные не доступны.
Когда программа должна завершиться, мне нужно закрыть поток, однако он заблокирован при выборе.

Мой вопрос, это хорошая практика, чтобы уведомить поток о моих намерениях прекратить, закрыв дескриптор файла?

Есть ли лучший способ уведомить поток?
Я знаю, что всегда есть возможность использовать сигнал, однако я читал в некоторых местах, где pthreads не очень хорошо работают вместе

1

Решение

Ну, вы можете использовать канал и добавить его в свой набор для чтения. Отправьте один байт на канал, когда поток должен завершиться.

Или есть тайм-аут на select вызов, и когда это таймауты, проверяют на флаг завершения.

5

Другие решения

В дополнение к мягким путям, предложенным Иоахим, Есть также некоторые грубые подходы к
«прервать» блокировку select():

  • использование pthread_kill() отправить сигнал на блокирующий поток и проверить (EINTR == errno) после select() обсуждаемый
  • вызов pthread_cancel() по идентификатору потока. select() принадлежит множеству точек отмены по умолчанию.

Оба метода должны рассматриваться как последнее решение для пересмотра.

0

По вопросам рекламы [email protected]