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