2015-04-21 3 views
1

Я установил обработчик сигнала в своей основной теме. Отдельный поток затем посылает мой основной поток этот сигнал. Мой обработчик сигнала называется соответствующим образом, но я не уверен, что это за состояние «основного» потока на данный момент и можно ли его восстановить. в основном мой основной поток был заблокирован при вызове read(), а другой поток отправил ему сигнал из-за необычного события. Таким образом, я хочу, чтобы вызов read() вышел из строя (EINTR?), Поэтому мой другой поток отправил основной поток этого сигнала.Что происходит с остальной частью стека во время обработки сигнала?

ответ

1

Это зависит от того, как вы установили обработчик сигнала. Если обработчик сигнала был установлен с использованием sigaction() и без указания флага SA_RESTART, то read() потерпит неудачу с EINTR, если он еще не передал данные.

Как правило, поток, обработанный сигналом, может продолжать нормально после возврата обработчика сигнала. В этом весь смысл.

Помните, что сигнал может прибыли только после того, как read() успешно вернулся, тоже - или хуже, просто перед тем вы назвали read() (в этом случае read() будет еще блок).