Provided by: manpages-ru_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       nptl - библиотека нитей POSIX

ОПИСАНИЕ

       NPTL  (Native POSIX Threads Library — библиотека нитей POSIX) это библиотека GNU C, в которой реализованы
       нити POSIX, используется в современных версиях Linux.

   NPTL и сигналы
       Внутри в NPTL используются первые два сигнала реального времени (номера сигналов 32 и 33). Один  из  этих
       сигналов  используется  для  поддержки  отмены  потоков  и  таймеров  POSIX (см. timer_create(2)); другой
       используется как часть механизма, который гарантирует, что все потоки в процессе всегда имеют  одинаковые
       UID и GID, как того требует POSIX. Эти сигналы не могут быть использованы в приложениях.

       Чтобы  не  допустить  случайного  использования  этих  сигналов  в приложениях, что может помешать работе
       реализации NPTL, в различных функциях библиотеки glibc и обёрточных функциях системных вызовов  добавлено
       сокрытие этих сигналов от приложений:

       •  Сигнал SIGRTMIN определён со значением 34 (а не 32).

       •  Интерфейсы  sigwaitinfo(2), sigtimedwait(2) и sigwait(3) игнорируют запросы на ожидание этих сигналов,
          если но указаны в аргументе набора сигналов.

       •  Интерфейсы sigprocmask(2) и pthread_sigmask(3) игнорируют попытки блокировки этих сигналов.

       •  Интерфейсы sigaction(2), pthread_kill(3) и pthread_sigqueue(3) завершаются с  ошибкой  EINVAL  (указан
          некорректный номер сигнала), если заданы эти сигналы.

       •  Функция sigfillset(3) не включает эти сигналы при создании полного набора сигналов.

   NPTL и изменение идентификаторов процесса
       На  уровне  ядра Linux идентификаторы (пользовательский и групповой ID) являются атрибутов нити. Однако в
       POSIX требуется, чтобы все нити POSIX одного процесса имели одинаковые идентификаторы. Для удовлетворения
       этого требования в реализации NPTL  для  всех  системных  вызовов,  изменяющих  идентификаторы  процесса,
       созданы  обёрточные функции, которые при обращении к нижележащим вызовам, также изменяют идентификаторы и
       всем остальным нитям процесса.

       В реализации каждого из этих системных вызовов используется сигнал реального времени, который  посылается
       (с  помощью  tgkill(2)) всем остальным нитях, которым нужно изменить идентификаторы. Перед отправкой этих
       сигналов, нить,  у  которой  изменяются  идентификаторы,  сохраняет  новые  идентификаторы  и  записывает
       использующийся  системный  вызов  в глобальный буфер. Обработчик сигнала в принимающей нити извлекает эту
       информацию и использует тот же системный вызов для изменения своих идентификаторов.

       Обёрточные  функции,  использующие  такую  же  технику:  setgid(2),  setuid(2),  setegid(2),  seteuid(2),
       setregid(2), setreuid(2), setresgid(2), setresuid(2) и setgroups(2).

СТАНДАРТЫ

       Дополнительную информацию о соответствии NPTL стандарту POSIX находится в pthreads(7).

ПРИМЕЧАНИЯ

       В  POSIX  сказано,  что  всем  нитям  процесса  с  доступом  к  памяти,  содержащей  общие  для  процесса
       (PTHREAD_PROCESS_SHARED) мьютексы, доступны эти мьютексы. Однако в 64-битных системах с архитектурой  x86
       определение  мьютекса  для  x86-64  несовместимо  с  определением для i386, что означает, что исполняемые
       32-битные и 64-битные файлы не могут иметь общих мьютексов в системах x86-64.

СМОТРИТЕ ТАКЖЕ

       credentials(7), pthreads(7), signal(7), standards(7)

ПЕРЕВОД

       Русский перевод этой страницы руководства разработал(и) Alex Nik <rage.iz.me@gmail.com>, Azamat  Hackimov
       <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Yuri Kozlov <yuray@komyakino.ru>,
       Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                          nptl(7)