文件锁与记录锁的比较:1.如果持有该锁的进程没有释放它就终止了,那么文件名并未删除。解决办法,检查该文件最近访问时间,超过一定限度认为它已经被遗忘另外一个是将 PID 写入该文件,其他进程检查PID 是否存在。fcntl 记录锁就没有这个问题,因为当某个进程终止时,由它所持有的锁都自动释放。2.如果另外进程打开了锁文件,当前进程只是无限循环的open,进行轮询,比较耗cpu.建议 sleep();而 fcntl 没有这个问题,因为 可以用 FSETLKW 命令,锁可用时,唤醒。3.调用 open 和 unlink 比 fcntl 两次(一次获得锁,一次释放锁) 慢。差不多75倍。
1.概述
劝告性上锁:
启动一个守护进程唯一的副本: