Почему flock () работает иначе, когда объект File новый? - PullRequest
0 голосов
/ 26 октября 2018

Вот код, и он работает:

f = File.new('test', File::CREAT | File::RDWR)
f.flock(File::LOCK_EX)
f.flock(File::LOCK_EX)
puts 'Works!'

Однако этот код не работает:

File.new('test', File::CREAT | File::RDWR).flock(File::LOCK_EX)
File.new('test', File::CREAT | File::RDWR).flock(File::LOCK_EX)
puts 'Works!'

Вы можете объяснить, почему это так?Мой актуальный вопрос: как заставить работать второй фрагмент?

1 Ответ

0 голосов
/ 26 октября 2018

как заставить работать второй фрагмент?

Разблокируйте файл с помощью LOCK_UN перед попыткой повторной блокировки с помощью LOCK_EX.Или не используйте LOCK_EX.

Чтобы узнать, почему это происходит, см. Документацию на flock(2).

Если процесс использует open(2) (или аналогичный) для получения более одного дескриптора файла для одного и того же файла, эти файловые дескрипторы обрабатываются независимо flock().Попытка заблокировать файл с помощью одного из этих файловых дескрипторов может быть отклонена блокировкой, которую вызывающий процесс уже установил через другой файловый дескриптор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...