LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Причины две, а может быть одна.

Если «одна», то вот она: лок это нативный механизм в ядре для данных целей, а создания-удаления и подобное - костыли, применяющиеся в основном по незнанию. И локфайлами они не называются! Локфайл это именно файл для flock, называть так файл для проверки его существования неграмотно.

А теперь два следствия: во-первых, ядерный лок автоматически снимается когда прога, взявшая его, завершилась (или ребутнулся комп), во-вторых, ядерный лок не использует обращения к диску ни в каком виде - он целиком в оперативной памяти вне зависимости от того, на какой устройстве хранится файл (ладно, могут быть нюансы со всякими nfs - на них локфайлы делать не надо, впрочем файлы с проверкой существования - тоже не надо).

Ну и ещё мелочь: занятый локфайл может наследоваться потомками занявшего его процесса (настраивается через O_CLOEXEC либо ручным вызовом close() после форка), образуя таким образом «сессию» занимаемого лока.

Если вопрос про то что же такое flock то это по сути мютекс (точнее, rwlock, но не суть), привязанный к объекту файловой системы и таким образом расшаренный между всеми процессами, которые этот файл видят.

Исправление firkax, :

Причины две, а может быть одна.

Если «одна», то вот она: лок это нативный механизм в ядре для данных целей, а создания-удаления и подобное - костыли, применяющиеся в основном по незнанию. И локфайлами они не называются! Локфайл это именно файл для flock, называть так файл для проверки его существования неграмотно.

А теперь два следствия: во-первых, ядерный лок автоматически снимается когда прога, взявшая его, завершилась (или ребутнулся комп), во-вторых, ядерный лок не использует обращения к диску ни в каком виде - он целиком в оперативной памяти вне зависимости от того, на какой устройстве хранится файл (ладно, могут быть нюансы со всякими nfs - на них локфайлы делать не надо, впрочем файлы с проверкой существования - тоже не надо).

Ну и ещё мелочь: занятый локфайл может наследоваться потомками занявшего его процесса (настраивается через O_CLOEXEC либо ручным вызовом close() после форка), образуя таким образом «сессию» занимаемого лока.

Если вопрос про то что же такое flock то это по сути мютекс, привязанный к объекту файловой системы и таким образом расшаренный между всеми процессами, которые этот файл видят.

Исходная версия firkax, :

Причины две, а может быть одна.

Если «одна», то вот она: лок это нативный механизм в ядре для данных целей, а создания-удаления и подобное - костыли, применяющиеся в основном по незнанию. И локфайлами они не называются! Локфайл это именно файл для flock, называть так файл для проверки его существования неграмотно.

А теперь два следствия: во-первых, ядерный лок автоматически снимается когда прога, взявшая его, завершилась (или ребутнулся комп), во-вторых, ядерный лок не использует обращения к диску ни в каком виде - он целиком в оперативной памяти вне зависимости от того, на какой устройстве хранится файл (ладно, могут быть нюансы со всякими nfs - на них локфайлы делать не надо, впрочем файлы с проверкой существования - тоже не надо).

Ну и ещё мелочь: занятый локфайл может наследоваться потомками занявшего его процесса (настраивается через O_CLOEXEC либо ручным вызовом close() после форка), образуя таким образом «сессию» занимаемого лока.