отмена блокировки чтения в Linux - PullRequest
2 голосов
/ 06 марта 2011

У меня есть блокирующее чтение в linux, работающее в потоке.

Во время завершения работы программы я хочу вырвать поток из этого чтения.К сожалению, я не могу использовать опрос или выбирать и писать правильный код, потому что файл, который читается из, является драйвером устройства, который не реализует функцию опроса / выбора.

В качестве временного решения в настоящее время я посылаю сигнал SIGUSR1 черезpthread_kill в поток и вызов pthread_exit из обработчика.Это убивает поток и работает до сих пор, но я не удовлетворен решением, потому что сигнал может появиться где угодно, не только внутри чтения.

Есть ли какой-нибудь механизм, прерывающий блокирующее чтение в linux?

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

1 Ответ

4 голосов
/ 07 марта 2011

Если вы хотите, чтобы сигнал влиял только на чтение, используйте pthread_sigmask(), чтобы сохранить сигнал заблокированным до начала чтения и затем снова заблокировать его.

...