В Linux flock
- системный вызов . flock
блокировки и fcntl
блокировки независимы и не мешают друг другу (по крайней мере, в локальных файловых системах).
Исходный файл glibc sysdeps/posix/flock.c
фактически не используется в Linux. Реальная реализация - это оболочка системного вызова, сгенерированная из этой строки в sysdeps/unix/sysv/linux/syscalls.list
:
flock - flock i:ii __flock flock
Блокировки OFD - это еще один вид блокировок, но они взаимодействуют с блокировками записи POSIX. Однако они имеют более разумное поведение с несколькими потоками, и закрытие одного дескриптора не освобождает все блокировки для одного и того же базового файла, удерживаемого одним и тем же процессом (что делает блокировку записи POSIX настолько трудной для использования в многопоточных процессах).