Фьютекс

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Фьютекс (англ. futex, сокращение от англ. fast userspace mutex) — в программировании способ реализации семафоров и мьютексов POSIX в Linux. Впервые введены в ядро с версии 2.5.7 (development); выработана стабильная семантика с 2.5.40; включаются в стабильные версии серии 2.6.x (stable).

Разработаны Уберту Франке (Hubertus Franke) (из исследовательского центра IBM им. Томаса Ватсона), сотрудниками технологического центра IBM по Linux Мэттью Кирквудом (Matthew Kirkwood) и Расти Расселом, а также разработчиком в компании Red Hat Инго Молнаром (Ingo Molnar).

Фьютекс представляет собой выровненное целое в общей памяти (для нескольких процессоров). Это целое может быть увеличено или уменьшено на единицу за одну ассемблерную инструкцию. Процессы, «завязанные» на этот фьютекс, ждут, когда это значение станет положительным. Все операции с фьютексами практически полностью проводятся в пользовательском пространстве, соответствующие функции ядра задействуются лишь в ограниченном наборе спорных случаев. Это позволяет повысить эффективность использования синхронизирующих примитивов, поскольку большинство операций не используют арбитраж, а значит и избежать использование относительно дорогостоящих системных вызовов (англ. system calls).

Сходным образом оптимизированы объекты CRITICAL_SECTION в Win32 API, а также FAST_MUTEX в ядре Windows.[1]

Библиография[править | править вики-текст]

  • Уберту Франке, Расти Рассел, Мэттью Кирквуд, «Шум вокруг фьютексов: Быстрая блокировка на пользовательском уровне в Linux», Симпозиум по Linux 2002 года, Оттава, [1]  (англ.)

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]