Прерывание системных вызовов в потоках на Linux - PullRequest
2 голосов
/ 02 августа 2011

У меня есть pthread, который запускается в цикле, вызывая accept() блокирующим образом.Есть ли способ прервать этот вызов из другого потока?Все указывает на отправку потоку сигнала, но, очевидно, вы можете отправить только процессу сигналу.

Я не могу просто убить поток, потому что тогда он оставляет сокет открытым.И это не очень чисто в любом случае.Неужели нет способа сделать это?

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

Вы можете сигнализировать поток, используя pthread_kill(3).

Функция pthread_kill() отправляет сигнал sig в ​​поток, другой поток в том же процессе, что и вызывающая сторона.

Если установлен обработчик сигнала, обработчик будет вызываться в потоке thread .

Обратите внимание, вам не нужно убиватьнить ;Вы можете отправить сигнал, который просто вызывает accept сбой при EINTR.

0 голосов
/ 02 августа 2011

Либо используйте select(), либо отправьте сингал процессу (это будет проблемой, если вы просто захотите прервать один из потоков).

...