2011-12-11 16 views
1

リモートディレクトリに読み書きする必要がある(複数のコンピュータからの)複数のアプリケーションのロックとしてファイルの一時ディレクトリを使用したいが、この問題は扱われていない。誰かが2回の同時通話で何が起こるかを知っていますか?異なるマシンからCreateDirectoryまたはCreateFileを同時に呼び出すとどうなりますか?

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363855%28v=vs.85%29.aspx

注:私は最高になり、データベースを使用して知っているが、これは私の場合は不可能です。

+1

少なくとも堅牢な方法では動作しません... 2番目の呼び出しは単純に成功します...あなたが記述するシナリオは、「スレッドセーフ」IMHOとはまったく関係ありません...リモートディレクトリ(ネットワーク/ SMB共有?)を使用しているため、特定の動作はOSのバージョンなどによって異なります。 – Yahia

+0

これはスレッドの安全性に関するものではありません。あなたが尋ねていることは、2つのプログラムが同時に同じファイル/ディレクトリを作成しようとする場合です。例については、http://stackoverflow.com/questions/2600471/how-to-lock-a-file-and-avoid-readings-while-its-writingを参照してください。 – dash

+0

私はWIN32 APIについてはわかりませんが、関数のマニュアルページやドキュメントページにスレッドセーフであると明示的に示されていない場合は、私はその関数が安全ではないと考えています。申し訳ありませんが、すべてのことより安全です。 –

答えて

2

CreateDirectoryを呼び出すと、異なるマシンから同じディレクトリ名を渡すと、1回の呼び出しだけが成功します。 API関数は実際にディレクトリを作成した呼び出しの場合にのみTRUEを返します。ファイルシステムを所有するマシン上のオペレーティングシステムは、このプロセスをアトミックにします。

しかし、CreateDirectoryへの2つの呼び出しの間にディレクトリを取得して削除する別の処理を停止することはありません。だからこそロック作業の原始的な形を得ることができますが、それはあまり堅牢ではなく、すべての関係者が協力する必要があります。

同じ理由がCreateFileに当てはまります。

+1

トランザクションAPIはリモートで動作しますか? – Yahia

+0

@Yahiaいいえ、そうではありません。ありがとう。 –

関連する問題