Фьютекс

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Фьютекс

Непрочитанное сообщение Olej » 06 июл 2017, 10:24

Очень интересная тема, почти не описанная в литературе.
Это быстрые блокировки в пользовательском пространстве... взамен (в некотором смысле) мютексов и семафоров.
Впервые на этом форуме этот механизм вылез в обсуждениях Помогите научиться устанавливать программы из исходного кода.
Это не POSIX механизм, а специфический для Linux:

Код: Выделить всё

man 7 futex
futex - fast user-space locking
...

Код: Выделить всё

man 2 futex
SYNOPSIS
       #include <linux/futex.h>
       #include <sys/time.h>

       int futex(int *uaddr, int op, int val, const struct timespec *timeout,
                 int *uaddr2, int val3);
       Note: There is no glibc wrapper for this system call; see NOTES.
...
CONFORMING TO
       This system call is Linux-specific.
...
Очень большой, и даже ажиотажный шум, вокруг фьютексов возник в публикациях и конференциях (англоязычных) около 2002 года.
Особо расширился этот механизм начиная с ядра 2.6.22-2.6.28.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Фьютекс

Непрочитанное сообщение Olej » 06 июл 2017, 12:19

Olej писал(а):Очень большой, и даже ажиотажный шум, вокруг фьютексов возник в публикациях и конференциях (англоязычных) около 2002 года.
Особо расширился этот механизм начиная с ядра 2.6.22-2.6.28.
Очень подробное описание механизма фьютексов на русском языке можно читать здесь: быстрая блокировка в пользовательском пространстве
В glibc нет обёртки для данного системного вызова; запускайте его с помощью syscall(2).
Там же есть полный законченный пример взаимодействия 2-х процессов (что существенно сложнее чем потоков):
В программе, показанной далее, показано использование фьютексов: родительский и дочерний процессы используют пару фьютексов, расположенных в общем анонимном отображении, для синхронизации доступа к общему ресурсу: терминалу. Каждый из процессов записывает nloops (аргумент командной строки, если отсутствует, то 5) сообщений на терминал и использует протокол синхронизации, который гарантирует, что они записываются поочерёдно. Результат работы программы:

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей