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