Provided by: manpages-ru-dev_4.23.1-1_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  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков.

Linux man-pages 6.8                               2 мая 2024 г.                               get_robust_list(2)