Provided by: manpages-ru-dev_4.23.1-1_all 

ИМЯ
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)