table of contents
SET_TID_ADDRESS(2) | Руководство программиста Linux | 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.
СМОТРИТЕ ТАКЖЕ¶
2004-09-10 | Linux |