Почему snprintf не считается асинхронным безопасным?

#linux #glibc #signal-handling

Вопрос:

Я просто писал отладку в обработчике сигналов и заметил, что на веб-сайте man7 snprintf не указан как асинхронная безопасная функция. Я бы подумал, что это просто изменит локальные переменные, поэтому мне интересно, почему это небезопасно для асинхронности?

Ответ №1:

почему это небезопасно для асинхронности?

Хотя snprintf sprintf ), как правило, отлично работают в обработчиках сигналов, они не гарантируют их работу.

Я бы подумал, что это просто изменит локальные переменные,

Этим функциям, возможно, потребуется инициализировать механизм локализации, что определенно небезопасно для асинхронного сигнала.

Комментарии:

1. Таким образом, вы предполагаете, что он может использовать общий глобальный механизм, в котором некоторые переменные относятся к каждому потоку и, следовательно, могут использоваться совместно с другими экземплярами snprintf. Со словом tend вы подразумеваете, что большинство систем могут быть асинхронно безопасными, или вы предполагаете, что состояние гонки настолько мало, что они, как правило , не попадают в него?