Прежде всего, я знаю, что основная причина, по которой strsignal() не является потокобезопасной, заключается в том, что стандарт говорит, что это не так.
Strsignal () Функция стандартной библиотеки GNU C определена в спецификации POSIX, и в этой спецификации сказано:
Функция strsignal() не требует быть потокобезопасным.
https://pubs.opengroup.org/onlinepubs/9 ... /strsignal. html
Поскольку стандарт не требует, чтобы strsignal() был потокобезопасным, код, использующий эту функцию
, не может этого предполагать является потокобезопасным, если в конкретной используемой реализации не указано, что он потокобезопасен.
Например, спецификация POSIX гласит, что strerror() может быть не потокобезопасным, но изменение в glibc 2.32 означает, что в более новых версиях glibc эта функция теперь потокобезопасна и указана как таковая в man 3 strerror.
https://lists. gnu.org/archive/html/info-gnu/2020-08/msg00002.html
Вопрос
Страница руководства для версии GNU для Linux функции стандартной библиотеки C для strsignal() указывает, что эта функция является потокобезопасной:
Справочные страницы Linux 6.7
Код: Выделить всё
man 3 strsignal
Код: Выделить всё
┌───────────────────────────────┬───────────────┬─────────────────────────────────┐
│ Interface │ Attribute │ Value │
├───────────────────────────────┼───────────────┼─────────────────────────────────┤
│ strsignal() │ Thread safety │ MT-Unsafe race:strsignal locale │
├───────────────────────────────┼───────────────┼─────────────────────────────────┤
│ sigdescr_np(), sigabbrev_np() │ Thread safety │ MT-Safe │
└───────────────────────────────┴───────────────┴─────────────────────────────────┘
https://elixir.bootlin.com/glibc/glibc- ... gnal.c#L27
Итак, начиная с glibc 2.32, почему strerror() считается MT-безопасным, но strsignal() все еще
задокументирован здесь как MT-Unsafe?
Исходный код также показывает, что для strsignal() нет привязок, специфичных для локали(), несмотря на то, что в документации говорится, что возможна гонка потоков локали. Является ли это гарантией будущих изменений, которые могут быть сделаны в будущем?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-system