Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

       get_robust_list,   set_robust_list   -   возвращает/назначает  список  надёжных  фьютексов
       (futexes)

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

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

       long syscall(SYS_get_robust_list, int pid,
                    struct robust_list_head **head_ptr, size_t *len_ptr);
       long syscall(SYS_set_robust_list,
                    struct robust_list_head *head, size_t len);

       Note: glibc provides no  wrappers  for  these  system  calls,  necessitating  the  use  of
       syscall(2).

ОПИСАНИЕ

       Данные  системные  вызовы  служат для ведения понетевых списков надёжных фьютексов. Данные
       списки управляются из  пользовательского  пространства:  ядро  знает  только  расположение
       начала  списка.  Нить  может  информировать  ядро  о  расположении  своего списка надёжных
       фьютексов с помощью set_robust_list(). Адрес списка надёжных фьютексов нити можно получить
       с помощью get_robust_list().

       Предназначением списка надёжных фьютексов является гарантия того, что если нить неожиданно
       из-за ошибки не разблокирует фьютекс  перед  завершением  или  вызовом  execve(2),  другая
       ожидающая  этот  фьютекс  нить  получит  уведомление  о  том, что бывший владелец фьютекса
       прекратил  работу.  Данное  уведомление  состоит  из  двух  частей:  установленного   бита
       FUTEX_OWNER_DIED  в  слове фьютекса и выполнение ядром futex(2) с операцией FUTEX_WAKE для
       одной из нитей, ожидающих фьютекс.

       Системный вызов  get_robust_list()  возвращает  начало  списка  надёжных  фьютексов  нити,
       идентификатор  которой  указан  в  pid.  Если значение pid равно 0, то возвращается начало
       списка вызывающей нити. Начало списка  сохраняется  в  расположение,  указанное  head_ptr.
       Размер объекта, указываемый **head_ptr, сохраняется в len_ptr.

       Право   вызывать   get_robust_list()   определяется   проверкой   режима   доступа  ptrace
       PTRACE_MODE_READ_REALCREDS; смотрите ptrace(2).

       Системный  вызов  set_robust_list()  запрашивает  ядро  записать  начало  списка  надёжных
       фьютексов,  принадлежащего  вызывающей  нити.  Аргумент  head  содержит  начало списка для
       записи. Аргумент len должен быть равен sizeof(*head).

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

       Системные вызовы  set_robust_list()  и  get_robust_list()  возвращают  ноль  при  успешном
       выполнении и код ошибки в противном случае.

ОШИБКИ

       Системный вызов pthread_setcancelstate() может завершиться со следующей ошибкой:

       EINVAL Значение len не равно sizeof(struct robust_list_head).

       Системный вызов get_robust_list() может завершиться со следующими ошибками:

       EFAULT Начало списка надёжных фьютексов невозможно сохранить в расположение head.

       EPERM  Вызывающий  процесс  не  имеет  прав  на  просмотр списка надёжных фьютексов нити с
              идентификатором pid и не имеет мандата CAP_SYS_PTRACE.

       ESRCH  Нить с идентификатором pid не найдена.

ВЕРСИИ

       Данные системные вызовы были добавлены в Linux 2.6.17.

ЗАМЕЧАНИЯ

       These system calls are not needed by normal applications.

       В нити может быть только один  список  надёжных  фьютексов;  поэтому  приложения,  которым
       требуется данное свойство, должны использовать мьютексы, предоставляемые glibc.

       В  первоначальной  реализации  нить,  ожидающая  фьютекс, уведомлялась о кончине владельца
       только,  если  владелец  прекращал  работу.  Начиная  с  Linux  2.6.28  уведомление  также
       посылается при выполнении владельцем execve(2).

       Идентификаторы  нитей,  упоминаемые  в основном тексте, являются ядерными идентификаторами
       нити, которые возвращаются из clone(2) и gettid(2).

СМ. ТАКЖЕ

       futex(2), pthread_mutexattr_setrobust(3)

       Файлы  Documentation/robust-futexes.txt  и  Documentation/robust-futex-ABI.txt  в   дереве
       исходного кода ядра Linux

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    был    сделан   Azamat   Hackimov
       <azamat.hackimov@gmail.com>,   Dmitry   Bolkhovskikh   <d20052005@yandex.ru>,    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⟩.