为什么 flock 不清理锁文件?

way*_*are 16 lock flock

进程完成后,我看到锁文件没有被删除?有什么理由flock保留文件吗?另外如何flock知道是否获得了锁?

这是来自crontab文件的示例

* * * * * flock python <script_name>.py
Run Code Online (Sandbox Code Playgroud)

Cel*_*ada 21

对于 的大多数用例flock,锁文件被“清理”是非常重要的。否则,想象一下这个场景:

  • 进程A打开锁文件,发现它不存在,于是创建了它。
  • 进程A获取锁
  • 进程B打开锁(发现它已经存在)
  • 进程 B 尝试获取锁但必须等待
  • 进程A释放锁
  • 进程 B 立即获取锁
  • 进程A删除锁文件
  • 进程C打开锁文件,发现它不存在,于是创建一个新的。请注意,它现在正在打开一个不同的锁定文件,该文件已被进程 B 锁定。
  • 进程 C 尝试获取锁并成功......但它应该不得不等待,因为进程 B 仍然有 [aprior incarnation of] 锁文件打开和锁定。

  • @wayfare 当您有 10 个进程等待相同资源时会发生什么取决于实现。重要的一点是,在任何给定时间,只有其中一个可以获取所述资源。 (3认同)