Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       set_tid_address - устанавливает указатель идентификатора нити

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <sys/syscall.h>      /* определения констант SYS_* */
       #include <unistd.h>

       pid_t syscall(SYS_set_tid_address, int *tidptr);

       Note:   glibc  provides  no  wrapper  for  set_tid_address(),  necessitating  the  use  of
       syscall(2).

ОПИСАНИЕ

       В ядре для каждой нити хранится два атрибута (адреса): set_child_tid и clear_child_tid. Их
       значение по умолчанию равно NULL.

       set_child_tid
              Если  нить  запущена  с  помощью  clone(2) с флагом CLONE_CHILD_SETTID, то значение
              set_child_tid устанавливается равным аргументу системного вызова ctid.

              Если  set_child_tid  присвоено  значение,  то  самое   первое   действие,   которое
              выполняется для новой нити, это запись ID нити по этому адресу.

       clear_child_tid
              Если  нить  запущена  с помощью clone(2) с флагом CLONE_CHILD_CLEARTID, то значение
              clear_child_tid устанавливается равным аргументу системного вызова ctid.

       Системный вызов set_tid_address() устанавливает у вызывающей нити значение clear_child_tid
       равным tidptr.

       Если   нить,  чьё  значение  clear_child_tid  не  равно  NULL,  завершается  и  если  нить
       использовала общую память с другими нитями, то по адресу,  указанному  в  clear_child_tid,
       записывается 0 и ядро выполняет следующую операцию:

           futex(clear_child_tid, FUTEX_WAKE, 1, NULL, NULL, 0);

       Действие  этой  операции в том, что она пробуждает единственную нить, выполнявшую ожидание
       futex на расположение памяти. Ошибки операции пробуждения futex игнорируются.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       Вызов set_tid_address() всегда возвращает ID вызывающей нити.

ОШИБКИ

       Вызов set_tid_address() всегда завершается без ошибок.

ВЕРСИИ

       Данный вызов появился в Linux 2.5.48. Представленное здесь описание соответствует  вызову,
       начиная с Linux 2.5.49.

СТАНДАРТЫ

       Данный вызов есть только в Linux.

СМ. ТАКЖЕ

       clone(2), futex(2), gettid(2)

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства   был   сделан   Alexander   Golubev
       <fatzer2@gmail.com>,  Azamat  Hackimov  <azamat.hackimov@gmail.com>,   Hotellook,   Nikita
       <zxcvbnm3230@mail.ru>,       Spiros       Georgaras       <sng@hellug.gr>,       Vladislav
       <ivladislavefimov@gmail.com>,   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⟩.