Цитата(alx2 @ Jun 18 2013, 07:47)

Нет, я все-таки подскажу!!!

Чтобы разбудить блокированный поток, пошлите ему сигнал SIGTHR:
pthread_kill(thr, SIGTHR).
Ой, простите. SIGTHR есть только в BSD. Похоже, в linux Вам поможет только
pthread_cancel().
pthread_cancel() доходит до потока когда он натыкается на cancellation point и поток завершается после этой точки, можно добавить обработчики на выходе. Но если используется сторонняя библиотека и один из ее вызовов прервется на середине выполнения при cancel(), откуда знать что она не рухнет, когда в обработчике будет происходит освобождение ее ресурсов. Тоже самое с сигналом и его обработчиком. Или хорошая библиотека не должна так делать?)
В функциях может стоять if (errno == EINTR)
Сообщение отредактировал Kirill_Good - Jun 18 2013, 06:23