gpt4 book ai didi

linux - Linux flock(fd, LOCK_EX|LOCK_NB) 会虚假地失败吗?

转载 作者:IT王子 更新时间:2023-10-29 00:41:51 25 4
gpt4 key购买 nike

考虑这样一种情况,其中两个进程并发尝试使用 flock(fd, LOCK_EX|LOCK_NB) 对某个文件放置独占锁。

如前所述,尝试是非阻塞,因此这两个进程之一应该会因 EWOULDBLOCK 而失败。

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

简而言之,flock(fd, LOCK_EX|LOCK_NB) 是否会因 EWOULDBLOCK 错误地失败?

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

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

最佳答案

阅读 man flock(2) :

EWOULDBLOCK The file is locked and the LOCK_NB flag was selected.

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

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

关于linux - Linux flock(fd, LOCK_EX|LOCK_NB) 会虚假地失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21117264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com