#linux #glibc #signal-handling
Вопрос:
Я просто писал отладку в обработчике сигналов и заметил, что на веб-сайте man7 snprintf не указан как асинхронная безопасная функция. Я бы подумал, что это просто изменит локальные переменные, поэтому мне интересно, почему это небезопасно для асинхронности?
Ответ №1:
почему это небезопасно для асинхронности?
Хотя snprintf
(и sprintf
), как правило, отлично работают в обработчиках сигналов, они не гарантируют их работу.
Я бы подумал, что это просто изменит локальные переменные,
Этим функциям, возможно, потребуется инициализировать механизм локализации, что определенно небезопасно для асинхронного сигнала.
Комментарии:
1. Таким образом, вы предполагаете, что он может использовать общий глобальный механизм, в котором некоторые переменные относятся к каждому потоку и, следовательно, могут использоваться совместно с другими экземплярами snprintf. Со словом tend вы подразумеваете, что большинство систем могут быть асинхронно безопасными, или вы предполагаете, что состояние гонки настолько мало, что они, как правило , не попадают в него?