1

全て:

私はロギングソリューションを書いています。使用可能なログエンドポイントの1つは、テキストファイルです。複数のプロセスからそのファイルに書き込みたいと仮定します。共有でファイルを開き、名前付きミューテックスを使用してファイルへの同時アクセスを制御できます(すべてのアクセスが同じマシンで発生したと仮定します)。しかし、それから私は非同期IOについて疑問に思い始めました。プロセス内で、BeginWriteを使用して非同期で書き込みを発行できます。クロスプロセス、またはクロスマシンの問題はどうですか?そのような状況で非同期IOは安全ですか?

(BeginWrite()を呼び出すときに、渡すバッファーに、1つの論理「レコード」にまとめておく必要のあるすべてのものが含まれていると仮定します)

4

2 に答える 2

3

非同期IOソリューションを決定する前に、非同期書き込みと思われるものが同期的に処理されることがよくあることに注意してください。ロギングソリューションにとって特に重要なのは、非同期ディスクI /Oに隠されたちょっとした情報がWindowsNT、Windows 2000、およびWindowsXPでは同期として表示されることです。議論の中でそこに埋もれているのはこのナゲットです:

「WindowsNTでは、ファイルの長さを延長する書き込み操作はすべて同期されます。」

それは「WindowsNT」と言っていますが、私の経験では、Windows 2000、Windows XP、およびServer2003にも当てはまります。「WindowsNT」ではなく「NTFS」という意味だと思います。VistaまたはServer2008ではテストしていません。

この記事では、その制限に対する可能な解決策を提供します。私はそれらが機能すると思いますが、実際にそれらを試していません。

私が見つけた最も信頼できる解決策は、同期書き込みを行うスレッドを生成することです。首の痛みのようなもの、本当ですが効果的です。

于 2009-09-29T15:49:54.470 に答える
0

どういう意味かわかりません。適切なクロスプロセスミューテックスを使用してファイルへのアクセスを保護している場合は、非同期I / Oを使用しても、一度に1つのプロセスだけがファイルに書き込むことができます。これは、非同期I/Oが完了するまでミューテックスをロックしたままにすることを前提としています。

于 2009-09-29T15:19:41.773 に答える