set_tid_address - устанавливает указатель идентификатора нити
set_tid_address(2)
устанавливает указатель идентификатора нити
ОБЗОР
#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 устанавливается равным аргументу системного вызова
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.