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