我在 Perl v5.16 中遇到来自 File::NFSLock 的奇怪行为。我使用过时的锁定超时选项为 5 分钟。假设我有三个进程。其中一个在释放锁之前花费了 5 分钟以上,并且进程 2 获得了锁。然而,即使进程 2 的锁定时间不到 5 分钟,第三个进程即将到来并删除锁定文件,导致第二个进程在删除自身持有的 NFSLock 时失败。
我的理论说进程 3 错误地读取了锁的最后修改时间,因为它是由进程 1 而不是进程 2 写入的。我正在对挂载在 NFS 上的分区写入 nfs 锁。
有人对 perl NFSLock 有想法或面临类似问题吗?请参考以下快照
my $lock = new File::NFSLock {file => $file,
lock_type => LOCK_EX,
blocking_timeout => 50, # 50 sec
stale_lock_timeout => 5 * 60};# 5 min
$DB::single = 1;
if ($lock) {
$lock->unlock()
}
如果我在进程 1 的调试器点阻塞超过 5 分钟,我正在观察这种行为