В спецификации POSIX для fcntl()
указано:
Все блокировки, связанные с файлом для данного процесса, должны быть удалены, когда дескриптор файла для этого файла закрывается этим процессом или завершается процесс, удерживающий этот дескриптор файла.
Является ли эта операция разблокировки блокировок файловых сегментов, удерживаемых завершившимся процессом, атомарной для каждого файла? Другими словами, если процесс заблокировал сегменты байтов B1..B2 и B3..B4 файла, но не разблокировал сегменты до завершения, когда система сможет разблокировать их, это будут сегменты B1..B2 и B3. .B4 оба разблокированы до того, как другая fcntl()
операция по блокировке сегмента файла может быть успешной? Если не атомарный для каждого файла, зависит ли порядок, в котором эти сегменты файлов разблокируются системой, от порядка, в котором сегменты файлов были первоначально получены?
Спецификация для fcntl()
ничего не говорит, но, возможно, в спецификации POSIX есть общее положение, которое предписывает детерминированный порядок операций для очистки после нечистоплотного завершения процесса или сбоя.