这非常简单,但似乎不起作用。我正在使用 Ruby 的File#flock方法。首先,我锁定一个文件,然后释放锁定,然后尝试再次锁定它。第二次锁定失败,就好像文件仍然被锁定一样。这是来自 irb 会话的直接复制粘贴。我正在使用在 Ubuntu 13.04 上运行的 Ruby 2.1.0p0。
$ irb
>> File.open('/tmp/asdf', 'r+').flock(File::LOCK_EX)
=> 0
>> File.open('/tmp/asdf', 'r+').flock(File::LOCK_UN)
=> 0
>> File.open('/tmp/asdf', 'r+').flock(File::LOCK_EX)
^CIRB::Abort: abort then interrupt!
from (irb):3:in `call'
from (irb):3:in `flock'
from (irb):3
from /usr/local/rvm/rubies/ruby-2.1.0/bin/irb:11:in `<main>'
如果文件仍处于锁定状态,第二次 LOCK_EX 尝试就会挂起。从上面的复制粘贴中可以看出,我不得不用 Ctrl-C 中止第二次尝试。
知道为什么解锁在这里不起作用吗?
作为参考,我需要这个的原因是因为我试图获得一个 Mutex 的等价物,但它是跨进程而不是线程的。根据我在网上阅读的内容,文件锁应该足够了。