我过去曾使用flock()和fcntl(),但我一直担心某些旧版Linux的行为未定义或有问题。
我需要一个兼容旧版Linux-es(例如2.6.18或更高版本)和NFS 3 +的解决方案。
flock()和/或fcntl()会在这种情况下一直工作,还是我需要求助于打开(.... O_EXCL)来保证原子性?
答案 0 :(得分:1)
您绝对不能指望flock()
与NFS一起使用。如果您在一个流程中有多种用途,fcntl()
F_SETLK
{{1}}有很好的工作机会,可以提出警告:http://0pointer.de/blog/projects/locking.html
答案 1 :(得分:0)
从历史上看,flock
至少可以使用十年,并且自2.0以来由内核实现。来自flock man page
:
从内核2.0开始,flock()作为系统调用实现 正确而不是在GNU C库中模拟作为调用 的fcntl(2)。这产生了真正的BSD语义:没有交互 flock()和fcntl(2)放置的锁类型和flock()之间的关系 没有检测到死锁。
我认为它将满足您的需求,除非您正在处理2.0之前的内核。