6

2 つのプロセスが を使用してファイルに排他ロックを同時に設定しようとする状況を考えてみましょうflock(fd, LOCK_EX|LOCK_NB)

示されているように、試行は非ブロッキングであるため、2 つのプロセスのうちの 1 つが で失敗するはずEWOULDBLOCKです。

ここに私の質問があります: (Linux) の実装は、flock()そのような場合に 2 つのプロセスのうちの 1 つだけが成功することを保証しますか? EWOULDBLOCKまたは、他の誰も干渉していない場合でも、両方が失敗する可能性はありますか?

要するに、?flock(fd, LOCK_EX|LOCK_NB)で誤って失敗することはありません。EWOULDBLOCK

私は主にflock()Linux が提供するのバージョンに関心がありflock()ますが、OS X などの他のシステムに関する情報も大歓迎です。

また、ロックが排他的 ( LOCK_EX) であろうと共有 ( LOCK_SH) であろうと、答えは同じだと思います。そうでない場合は、お知らせください。

4

1 に答える 1

1

読書マン群れ(2) :

EWOULDBLOCK ファイルはロックされており、LOCK_NB フラグが選択されています。

したがって、EWOULDBLOCK を取得するということは、ファイルが既にロックされていることを意味します。2 つのプロセスだけが関係していることが保証されている場合、同じファイルで同時に EWOULDBLOCK を取得することはありません。

スレッドは別の話であることに注意してください。通常、スレッドはファイル記述子を共有するため、同じプロセス内の複数のスレッドが同じファイルに対して flock() を正常に呼び出すことができます。

于 2014-01-14T17:13:14.947 に答える