Linux で flock(2) を使用して、共有ロック モードと排他ロック モードの両方を使用して、自作データベースのリソースへのアクセスを制御しています。共有ロックが許可されている場合、排他ロックを待機しているブロックされたプロセスがあるかどうかに関係なく、別のプロセスも共有ロックを取得できることがわかりました。これは、多くの重複するリーダーを持つ人気のあるリソースの場合、排他ロック要求が長時間 (おそらく永遠に) 枯渇する可能性があることを意味します。
この動作は flock(2) の man ページと矛盾していませんが、このコードは何年もの間 FreeBSD と OS-X で問題なく動作しているので、私は驚きました。私の推測では、排他ロックが永久に不足するのを防ぐために、BSD システムはある種のキューを実装する必要があると思います。
私の主な質問は、排他ロックが不足しないようにするための簡単なトリックまたはプログラミングパターンはありますか?
私の好奇心を満たすための二次的な質問ですが、これが私が疑うようなBSDシステムで本当に違うかどうか誰か知っていますか?