- 922 名前:login:Penguin [2008/07/25(金) 13:35:09 ID:VHMpv0v7]
-
二つのプロセスが、早い者勝ちであるファイルを作っている。 二つのgccが早い者勝ちで同じ a.out を作っている、とかね。 この場合なんだけど、 このファイル更新処理をアトミックでやる最善の方法は? 何が言いたいかというと、プロセスAがもう出力を始めたのに、 プロセスBがそれを上書きするような事態は避けたい。 たとえば、同じパスにa.out.$pid とかを作って、 それを rename(2) する、という方法だと、 別プロセスの方が先にファイルを作っていても、それを上書きしちゃう。 いまは、ファイル出力前に、a.out を touch して、 その有無をある種のLock Fileの様につかい、 あとは普通に a.out.$pid から rename してるんだけど、 これだと、 touch した直後にプロセスがコケるとデッドロックしちゃうし、 なにより、二つに処理を分けるのがカッコわるい。 一撃でアトミックにやる方法は?
|

|