Tag:

如何使用File#flock对独占锁进行非阻塞请求?

我该如何申请非阻塞锁? 为什么在单独尝试锁定文件时,Ruby的File#flock不能按预期工作? 锁定块中的文件不是解决此问题的正确方法,因为重点是显示锁定持久锁的行为。 在块中使用File#flock会在块退出时释放锁定,因此它不能正确显示问题。 File#flock以各种方式失败,尤其是在请求非阻塞锁定时。 一些例子如下。 File#flock失败的例子 使用多个独占锁时无限等待,因为#flock不提供超时锁定请求的方法。 # First lock succeeds. f1 = File.open(‘foo’, File::RDWR|File::CREAT, 0644) f1.flock(File::LOCK_EX) # => 0 # This never returns. f2 = File.open(‘foo’, File::RDWR|File::CREAT, 0644) f2.flock(File::LOCK_EX) 在文件被独占锁定时请求非阻塞锁定会导致无效的参数exception。 f1 = File.open(‘foo’, File::RDWR|File::CREAT, 0644) f1.flock(File::LOCK_EX) # => 0 f2 = File.open(‘foo’, File::RDWR|File::CREAT, 0644) f2.flock(File::LOCK_NB) # => Errno::EINVAL: Invalid argument – foo 文档说#flock“根据locking_constant(逻辑或下表中的值)锁定或解锁文件。” […]