考虑这样一种情况:两个进程同时尝试使用flock(fd, LOCK_EX|LOCK_NB)
对某个文件进行独占锁定。
如上所述,尝试是非阻塞,因此两个进程中的一个应该以{{1}}失败。
以下是我的问题:EWOULDBLOCK
的(Linux)实现是否保证两个进程中的一个在每种情况下都会成功?或者,即使没有其他人在干涉,它们是否有可能最终以flock()
失败?
简而言之,EWOULDBLOCK
可以flock(fd, LOCK_EX|LOCK_NB)
虚假失败吗?
我主要对Linux提供的EWOULDBLOCK
版本感兴趣,但欢迎在其他系统(如OS X)上提供有关flock()
的信息。
此外,我假设答案是相同的,无论锁是独占(flock()
)还是共享(LOCK_EX
)。如果没有,请告诉我。
答案 0 :(得分:1)
阅读man flock(2):
EWOULDBLOCK 文件已锁定,并且已选择LOCK_NB标志。
因此获取EWOULDBLOCK意味着该文件已被锁定。如果保证您的两个进程是唯一涉及的进程,它们将永远不会同时在同一个文件上获得EWOULDBLOCK。
请注意,线程是另一回事。线程通常共享文件描述符,因此同一进程中的多个线程可以在同一个文件上成功调用flock()。