Index: [Article Count Order] [Thread]

Date:  Tue, 3 Oct 2000 14:04:55 +0900
From:  firo <firo@....jp>
Subject:  [XP-jp:01019] Re: ファイルロックユーティリティ
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <00Oct3.140452jst.115201@....jp>
References:  <A9771C1A05F3D211BA680008C707B29D0244CD92@ODAPEXC1>
Posted:  Tue, 3 Oct 2000 14:04:49 +0900
X-Mail-Count: 01019

矢崎です。

Nakamura Tadashiさん wrote:

> 中村@セイコーエプソンです.
>
> > あう。誤解されています。
> ありゃ.
>
> > このFileLockクラスは、それぞれ別のJVMからのアクセスを想定して作成され
> > ています。
> > よって、File#deleteOnExit()を指定することで、JVM終了時に必ずロックファ
> > イルが削除されてしまうと都合が悪いのです。

ええと、確かにここはややこしいところですね。

栗原さんのおっしゃっているのは、以下のようなことでいいでしょうか?

1.今JVMを2つ立ち上げた、JVM-AとJVM-Bとする。
2.JVM-AでFileLockを使用して、"config.txt"というファイルを排他的に
  作成。成功。
3.JVM-BでFileLockを使用して、"config.txt"というファイルを排他的に
  作成。JVM-AのFileLockが同名のファイルを先につくって、かつ、まだ
  リリースしていないので、失敗。
4.JVM-AのFileLockがリリース。"config.txt"は削除。
5.JVM-BのFileLockが"config.txt"の作成をリトライ。今度は成功。
6.JVM-Aを終了。しかし、JVM-BのFileLockはまだ、リリースしていない。

で、6の時点で、AのJVMが終了するため、deleteOnExit();がきいて、
"config.txt"は削除されてしまう。ところが、Bはまだ使っているつもり
でいて、あれれ・・・ファイルがない!



~~~~~~~~~~~~~~~~~~~~
中村さんの投稿を読んで、触発されてアイディアが1つわきました。
デストラクタで、
 if (create == true) lockFile.delete();
というのは、どうでしょう?

もちろん先にreleasaされていれば、上記deleteはfalseを返すと
思いますが、それは問題ではないと思うのですが、、


--
矢崎博英  firo@....jp