在Linux上使用mkdir作为基于文件的锁定是一种好习惯吗?

Kar*_*lek 6 linux locking

我想在linux上的perl程序中快速实现某种锁定,这可以在不同的进程之间共享.

所以我用作mkdir原子操作,1如果目录不存在0则返回,如果存在则返回.我在关键部分后立即删除目录.

现在,有人向我指出,这不是一般的好习惯(独立于语言).我认为这很好,但我想问你的意见.

编辑:为了显示一个例子,我的代码看起来像这样:

while (!mkdir "lock_dir") {wait some time}
critical section
rmdir "lock_dir"
Run Code Online (Sandbox Code Playgroud)

Fri*_*iek 5

恕我直言这是一个非常糟糕的做法.如果在关键部分创建锁目录的perl脚本以某种方式被杀死怎么办?等待锁定目录被删除的另一个perl脚本将永远等待,因为它不会被最初创建它的脚本删除.要使用安全锁定,请在锁定文件上使用flock()(请参阅perldoc -f flock).