linux - 如何防止 linux flock(2) 使独占锁请求挨饿?

标签 linux linux-kernel freebsd flock

我在 linux 中使用 flock(2) 来控制对 homespun 数据库中资源的访问,同时使用共享和独占锁定模式。我发现如果授予了共享锁,那么另一个进程也可以获得共享锁,而不管是否有阻塞的进程在等待独占锁。这意味着对于具有许多重叠读者的流行资源,独占锁请求可能会饿死很长时间,也许永远饿死。

此行为与 flock(2) 手册页并不矛盾,但令我感到惊讶的是,此代码已在 FreeBSD 和 OS-X 中运行多年而没有出现问题。我的猜测是 BSD 系统必须实现某种队列来防止独占锁永远饿死。

我的主要问题是,是否有任何简单的技巧或编程模式可以防止我的独占锁耗尽?

第二个问题,为了满足我的好奇心,有人知道这在 BSD 系统上是否真的像我怀疑的那样不同吗?

最佳答案

我在 FreeBSD 7.2 上遇到了完全相同的问题,并且没有找到防止 flock() 上的 writer starvation 的方法。您必须选择其他锁定方法,例如 SysV IPC 或简单的停止标志文件。

关于linux - 如何防止 linux flock(2) 使独占锁请求挨饿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7693107/

相关文章:

linux - 为什么 freebsd 上的 libstdc++ 不需要 libc.so 的链接?

linux - FreeBSD 终端找不到 sdk 命令

linux - 如何将库链接到执行文件

linux - 解释多线程程序上的时间命令输出

c++ - open 的返回值 ("dev/null",O_APPEND) 可以表示打开的文件太多了吗?

macos - OS X上的grep -f产生段错误

linux - 在 Linux 中从 kernel/net/sched 文件夹加载不同的模块

c - 在 3 次握手期间将 TCP 选项添加到 ACK 数据包

c - 互斥锁内的信号量等待

linux-kernel - 如何编写跨版本/平台的 Linux 内核模块?