Linux flock(fd,LOCK_EX | LOCK_NB)可以虚假失败吗?

Kri*_*ege 5 linux nonblocking file-locking flock

考虑这样一种情况:两个进程同时尝试使用某个文件放置一个独占锁flock(fd, LOCK_EX|LOCK_NB).

如上所述,尝试是非阻塞的,因此两个进程中的一个应该失败EWOULDBLOCK.

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

简而言之,可以flock(fd, LOCK_EX|LOCK_NB)虚假地失败EWOULDBLOCK吗?

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

此外,我假设答案是相同的,无论锁是独占(LOCK_EX)还是共享(LOCK_SH).如果没有,请告诉我.

gre*_*eke 1

阅读人潮(2)

EWOULDBLOCK 文件已锁定并选择了 LOCK_NB 标志。

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

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