2011-10-07 14 views
5

私はLinuxでflock(2)を使用して、共有モードと排他ロックモードの両方を使用してhomespunデータベースのリソースへのアクセスを制御しています。共有ロックが許可されている場合、排他ロックを待っているプロセスがブロックされているかどうかにかかわらず、別のプロセスも共有ロックを取得できることがわかります。これは、多くの重複する読者を持つ一般的なリソースの場合、排他的なロック要求がおそらく永遠に長い間、枯渇する可能性があることを意味します。linux flock(2)を排他的な排他ロック要求から守るには?

この動作はflock(2)のマニュアルページと矛盾しませんが、このコードは何年もFreeBSDとOS-Xで問題なく動作しています。私の推測では、BSDシステムは排他ロックが永遠に飢えてしまうのを防ぐために何らかのキューを実装しなければならないということです。

私の主な質問は、排他ロックを飢えさせないようにする簡単なトリックやプログラミングのパターンはありますか?

私の好奇心を満たすために、私が疑っているようなBSDシステムでこれが本当に違うかどうかは誰にも分かりますか?

+0

'flock'はロックキャラバンを思い出させます。 –

答えて

0

私はFreeBSD 7.2とまったく同じ問題を抱えていて、flock()でライターの飢餓を防ぐ方法は見つけられませんでした。 SysV IPCや単純な停止フラグファイルなど、他のロック方法を選択する必要があります。

関連する問題