Linux flock(fd,LOCK_EX | LOCK_NB)能否虚假地失败?

考虑两个进程同时尝试使用flock(fd, LOCK_EX|LOCK_NB)对某个文件进行独占locking的情况。

如上所述,这些尝试是非阻塞的 ,所以这两个进程中的一个应该是EWOULDBLOCK失败的。

这里是我的问题: flock()的(Linux)实现是否确保这两个进程中的一个在每个这样的情况下都能成功? 或者,即使在没有其他人干涉的情况下,是否有可能最终与EWOULDBLOCK失败?

总之, flock(fd, LOCK_EX|LOCK_NB)是否会与EWOULDBLOCK虚假地失败?

我主要感兴趣的是Linux提供的flock()版本,但是对于其他系统(例如OS X flock()信息是非常受欢迎的。

另外,我假设答案是相同的,无论锁是独占的( LOCK_EX )还是共享的( LOCK_SH )。 如果没有,让我知道。

读人群(2) :

EWOULDBLOCK文件被锁定 ,LOCK_NB标志被选中。

所以得到EWOULDBLOCK意味着文件已经被锁定。 如果保证你的两个进程是唯一涉及的进程,他们将永远不会同时在同一个文件上得到EWOULDBLOCK。

请注意,线程是一个不同的故事。 线程通常共享文件描述符,因此同一进程中的多个线程可以在同一个文件上成功调用flock()。