6

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

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

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

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

4

1 回答 1

0

I had exactly same problem on FreeBSD 7.2 and found no way to prevent writer starvation on flock(). You have to choose other locking method, like SysV IPC or simple stop-flag file.

于 2011-10-10T10:17:48.933 回答