futexes
include/linux/futex.h
kernel/futex.c
кажется так
про shared locks - кажется, нет
в деталях не разбирался с этой шнягой
kernel/futex.c
кажется так
про shared locks - кажется, нет
в деталях не разбирался с этой шнягой
А есть ли в Линукс (или любой другой open source ОС) реализация shared/exclusive lockов, в которой каждый тред мог бы проверить, то что он держит/не держит сейчас лок?
я в локах мало понимаю
в posix нет такого разве?
в posix нет такого разве?
В pthread такого точно нет. В pthread, по-моему нету shared. Тем более, что мне нужна не спецификация, а реализация 

я думаю, можно реализовать это поверх футексов
как и поверх sysv ipc
как и наверное поверх примитивов из posix threads
как и поверх sysv ipc
как и наверное поверх примитивов из posix threads
Мне нужно это реализовать в ядре. То есть значит пользуясь только атомарными примитивами. И мне хочется такой же производительности, как у обычных мьютексов, во всяком случае, того же порядка.
Если в ядре, то нужно использовать то, что есть в ядре.
Спинлоки, семафоры, wait queues и ещё что-то есть, это в линуксе.
Спинлоки, семафоры, wait queues и ещё что-то есть, это в линуксе.
В kernel/futex.c функция sys_futex - это собственно ядерная сторона syscallа?
P.S. Лень разбираться в том, как устроен syscall glue в Linux, а ты наверное знаешь.
P.S. Лень разбираться в том, как устроен syscall glue в Linux, а ты наверное знаешь.
Если тебе нужно из юзерспейса синхронизироваться - то надо читать man futex, а в ядро смотреть, только чтоб понять как реализовано.
А если из ядра - то на футексы забей, и используй внутренние механизмы ядра.
А если из ядра - то на футексы забей, и используй внутренние механизмы ядра.
shared lock - это примитив примерно того же уровня. Если его реализовывать с помощью перечисленного, то получится тормознуто.
> если из ядра - то на футексы забей, и используй внутренние механизмы ядра.
Я пока не въехал, но мне кажется что у футексов есть та функциональность, что мне интересна.
Я пока не въехал, но мне кажется что у футексов есть та функциональность, что мне интересна.
Поищи в гугле Rusty's Unreliable Locking Guide, там для начинающих кернел-хакеров написано про локи.
Должно быть на netfilter.org
Локов разных дофига, наверняка найдёшь то, что надо.
Я не уверен, что футексы нормально из ядра юзать, ихний прикол как раз в том, что переключение в контекст
ядра происходит только в случае contention, то есть в нормальной ситуации выполняется только fast path полностью в юзерспейсе.
Должно быть на netfilter.org
Локов разных дофига, наверняка найдёшь то, что надо.
Я не уверен, что футексы нормально из ядра юзать, ихний прикол как раз в том, что переключение в контекст
ядра происходит только в случае contention, то есть в нормальной ситуации выполняется только fast path полностью в юзерспейсе.
Ага, через хэш. Выглядит не очень быстро... Возможно удовлетворительно для userland. Надо пробовать и мерять.
Оставить комментарий
sergey_m
1) Как называются ядерные сущности, которые соответствуют futexам в userland? В каком файле смотреть реализацию?2) В инете можно найти места, где люди называют futexы словами shared locks. Действительно ли это так? Могут ли два треда обладать futexом? Может ли каждый из них проверить, что он владеет локом или нет?