我想在linux上的perl程序中快速实现某种锁定,这可以在不同的进程之间共享.
所以我使用mkdir作为原子操作,如果目录不存在则返回1,如果存在则返回0.我在关键部分后立即删除目录.
现在,有人向我指出,这不是一般的好习惯(独立于语言).我认为这很好,但我想问你的意见.
编辑:
举一个例子,我的代码看起来像这样:
while (!mkdir "lock_dir") {wait some time}
critical section
rmdir "lock_dir"
解决方法:
恕我直言这是一个非常糟糕的做法.如果在关键部分创建锁目录的perl脚本以某种方式被杀死怎么办?等待锁定目录被删除的另一个perl脚本将永远等待,因为它不会被最初创建它的脚本删除.
要使用安全锁定,请在锁定文件上使用flock()(请参阅perldoc -f flock).