Почему GNU GLIBC strsignal() считается потокобезопасным в современных операционных системах?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Почему GNU GLIBC strsignal() считается потокобезопасным в современных операционных системах?

Сообщение Anonymous »

Справочная информация
Прежде всего, я знаю, что основная причина, по которой strsignal() не является потокобезопасной, заключается в том, что стандарт говорит, что это не так.
Strsignal () Функция стандартной библиотеки C определена в спецификации POSIX, и в этой спецификации говорится (технически это POSIX, определяющий стандарт ISO-C, но в любом случае):

Функция strsignal() не обязательно должна быть потокобезопасной.


https:// pubs.opengroup.org/onlinepubs/9699919799.2016edition/functions/strsignal.html

Поскольку стандарт не требует, чтобы strsignal() был потокобезопасный, код, использующий эту функцию,
не может предполагать, что он является потокобезопасным, если только в конкретной используемой реализации не указано, что он является потокобезопасным.
Например, спецификация POSIX говорит что strerror() может быть не потокобезопасным, но изменение в glibc 2.32 означает, что в более новых версиях glibc эта функция теперь потокобезопасна и указана как таковая в man 3 strerror.
https://lists.gnu.org/archive/html/info ... 00002.html
Вопрос
На странице руководства для версии GNU linux функции стандартной библиотеки C для strsignal() указано, что эта функция небезопасна для потоков:
Linux man -страницы 6.7

Код: Выделить всё

man 3 strsignal

Код: Выделить всё

┌───────────────────────────────┬───────────────┬─────────────────────────────────┐
│ Interface                     │ Attribute     │ Value                           │
├───────────────────────────────┼───────────────┼─────────────────────────────────┤
│ strsignal()                   │ Thread safety │ MT-Unsafe race:strsignal locale │
├───────────────────────────────┼───────────────┼─────────────────────────────────┤
│ sigdescr_np(), sigabbrev_np() │ Thread safety │ MT-Safe                         │
└───────────────────────────────┴───────────────┴─────────────────────────────────┘
Однако просмотр исходного кода показывает, что специально для glibc видно, что с версии 2.32 strsignal() использует локальный буфер потока, что, как я думаю, делает его потокобезопасным .
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»