Форум сайта python.su
Ув эксперты, подскажите, что будет, если во время работы обработчика сигнала, придет еще один такой же сигнал? Нужно ли мне заботиться о реентрабельности обработчика, или заботливый cpython делает всю скучную работу сам?
Или киньте ссылку где описаны тонкости обработки сигналов в cpython, я чего то не могу найти.
Офлайн
Для таких случаев всегда используют очередь.
Вне зависимости от языка.
Если это не какой-нить сигнал прерывания.
Отредактировано Lexander (Авг. 2, 2012 12:40:36)
Офлайн
Имеются в виду posix signals (http://en.wikipedia.org/wiki/Unix_signal) или что-то другое?
Офлайн
Андрей Светлов
Имеются в виду posix signals (http://en.wikipedia.org/wiki/Unix_signal) или что-то другое?
Офлайн
Офлайн
Lexander
Это
http://www.sagemath.org/doc/developer/coding_in_cython.html#interrupt-and-signal-handling
читали?
Офлайн
Когда сигнал срабатывает — выставляется флажок и форсируется переключение на главный поток (с не-сигнальным стеком).
Eval-Loop главного потока исполняет код обработчиков сигналов перед выполнением очередного ординарного байткода.
Таким образом реентрабельность получается сама (там еще thread locks беруться, чтобы себе на хвост не наступить).
Я год назад писал http://asvetlov.blogspot.com/2011/07/signal.html — это о немного другом аспекте в обработке сигналов.
Если все еще непонятно — спрашивайте.
Офлайн
я примерно так все и представлял. спасибо
Офлайн