get_robust_list - возвращает/назначает список надёжных
get_robust_list(2)
возвращает/назначает список надёжных
Other Alias
set_robust_list
ОБЗОР
#include <linux/futex.h>
#include <sys/types.h>
#include <syscall.h>
long get_robust_list(int pid, struct robust_list_head **head_ptr,
size_t *len_ptr);
long set_robust_list(struct robust_list_head *head, size_t len);
Замечание: В glibc нет обёрточных функций для этих системных вызовов;
смотрите
ЗАМЕЧАНИЯ.
ОПИСАНИЕ
Реализация надёжных фьютексов требует ведения понетевых списков надёжных
фьютексов, которые будут разблокированы при завершении нити. Данные списки
сопровождаются из пользовательского пространства; ядро уведомляется только о
расположении начала списка.
Системный вызов get_robust_list() возвращает начало списка надёжных
фьютексов нити, идентификатор которой указан в pid. Если значение pid
равно 0, то возвращается начало списка вызывающей нити. Начало списка
сохраняется в расположение, указанное head_ptr. Размер объекта,
указываемый **head_ptr, сохраняется в len_ptr.
Системный вызов 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() может завершиться со следующими
ошибками:
EPERM
Вызывающий процесс не имеет прав на просмотр списка надёжных фьютексов нити
с идентификатором pid и не имеет мандата CAP_SYS_PTRACE.
ESRCH
Нить с идентификатором pid не найдена.
EFAULT
Начало списка надёжных фьютексов невозможно сохранить в расположение
head.
ВЕРСИИ
Данные системные вызовы были добавлены в Linux 2.6.17.
ЗАМЕЧАНИЯ
Эти системные вызовы не нужны обычным приложениям. Поддержка в glibc
отсутствует. В маловероятном случае, когда вы хотите вызвать их напрямую,
используйте
syscall(2).
В нити может быть только один список надёжных фьютексов; поэтому приложения,
которым требуется данное свойство, должны использовать мьютексы,
предоставляемые glibc.