Provided by: manpages-ru_4.27.0-1_all 

НАИМЕНОВАНИЕ
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)