SET_TID_ADDRESS(2)

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

ОБЗОР
#include <linux/unistd.h>

long set_tid_address(int *tidptr);

ОПИСАНИЕ
В ядре для каждого процесса хранятся два значения: set_child_tid и clear_child_tid, которые по умолчанию равны NULL.

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

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

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

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

Если clear_child_tid присвоено значение, то при завершении работы процесса (и если он использовал общую с другими процессами или нитями память) по этому адресу записывается 0 и выполняется вызов futex(child_tidptr, FUTEX_WAKE, 1, NULL, NULL, 0); (то есть, пробуждается один процесс, ожидающий этот futex). Ошибки игнорируются.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Вызов set_tid_address() всегда возвращает PID вызывающего процесса.

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

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

СООТВЕТСТВИЕ СТАНДАРТАМ
Данный вызов есть только в Linux.

СМОТРИТЕ ТАКЖЕ
clone(2), futex(2)