Страница 1 из 1

Фьютекс

Добавлено: 06 июл 2017, 10:24
Olej
Очень интересная тема, почти не описанная в литературе.
Это быстрые блокировки в пользовательском пространстве... взамен (в некотором смысле) мютексов и семафоров.
Впервые на этом форуме этот механизм вылез в обсуждениях Помогите научиться устанавливать программы из исходного кода.
Это не 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.

Re: Фьютекс

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