Provided by: manpages-ru_4.19.0-7_all bug

ИМЯ

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

ОПИСАНИЕ

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

   NPTL и сигналы
       NPTL makes internal use of the first two real-time signals (signal  numbers  32  and  33).
       One  of  these  signals  is  used  to  support  thread  cancelation  and POSIX timers (see
       timer_create(2)); the other is used as part of a mechanism that ensures all threads  in  a
       process always have the same UIDs and GIDs, as required by POSIX.  These signals cannot be
       used in applications.

       Чтобы не допустить  случайного  использования  этих  сигналов  в  приложениях,  что  может
       помешать  работе  реализации  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>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.