LongJMP вне обработчика сигнала?

от вопроса:

Это хорошая практика программирования для использования SetJMP и Longjmp в C?

Два из комментариев были сказаны:

«Вы не можете бросить исключение в обработчик сигнала, но вы можете сделать longjmp безопасно - до тех пор, пока вы знаете, что вы делаете. - Дитрих EPP 31 августа в 19:57 @Dietrich: +1 на ваш комментарий. Это немного известно и полностью недооцененный факт. Есть ряд проблем, которые не может быть решена (противные гонки) без использования LongJMP из обработчики сигналов. Асинхронное прерывание блокирующих сих пор является Классический пример. "

Я находился под впечатлением, что обработчики сигналов были вызваны ядром, когда он столкнулся с исключительным условием (например, разделить на 0). Кроме того, они называются только если вы конкретно зарегистрируете их.

Это, похоже, подразумевает (для меня), что они не вызываются по вашему нормальному коду.

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

16
задан Community 23 May 2017 в 11:47
поделиться