1

私には独特の問題があります。1つのファイルにアクセスしようとしている2つのプロセス(P0とP1)があります。P0はファイルに情報を書き込んでおり、P1は情報を読み取っています。P0が書き込みを終了する前にP1が読み取りを行っている、2つの間に競合状態が発生しています。ロック、セマフォなどの使用を検討しました。ただし、P1は、変更が許可されていない一連のコードに存在し、現在、上記の修正案をサポートする実装はありません。

両方のコードセットに触れることなく、この競合状態を取り除く方法はありますか?

4

2 に答える 2

0

Nielsのソリューションは優れていますが、デルタが小さい大きなファイルの場合は適用できない可能性があります。私はあなたの解決策が以下に依存することを提案するつもりです:
a)P1がファイルをロックしていて、単に競合を取り除きたい
かどうか、b)P1が読み取るものが常に更新されたコピーであることを確認する必要があるかどうかP0の変更、および
c)P1が問題のファイルの読み取りロックを尊重するかどうか。

また、基盤となるO / Sシステムコールを探して、プロセスを調整するためにP0内からP1の動作を追跡できるかどうかを確認します。たとえば、Windowsの場合、.NETSystem.Diagnostics.Processクラスはいくつかの便利なメソッドを提供する場合があります。

于 2010-07-30T18:46:56.877 に答える
0

P0にファイルAへの書き込みを許可し、P1にファイルBからの読み取りを許可することができます。P0がファイルの書き込みを完了したら、ファイルAの名前をファイルBに変更します。ただし、名前変更操作がアトミックであることを確認する必要があります。

于 2010-07-30T17:21:36.920 に答える