2012-11-15 19 views
6

boost::interprocess::file_lockを使用して、ディレクトリxにプロセスP1によって書き込まれたファイルが、プロセスP2によって完全に読み込まれないようにします。これを行うには、P1を書いている間にファイルをboost::interprocess::file_lockでロックしておき、完了したらロックを解除します。その後、P2は、ロックされているファイルをスキップすることができます。boost :: interprocess :: file_lockでロックされたファイルを作成する

私が抱えている問題は、boost::interprocess::file_lockは存在するファイルのみをロックできることです。私は最初のファイルを作成し、それをロックした場合でも、その後、競合状態があります:

  1. P1
  2. P2がファイルに気づくファイルを作成し、それが
  3. P1がファイルをロック読み取りを開始が
  4. P1一部データの書き込み
  5. は、一部のデータを読み取り、最後に到達し、P1の出力の一部のみで終了します。

だから私がしたいのは、ファイルを作成し、それが作成されるとすぐにロックさせることです。 boost::interprocess::file_lockを使用してこれを行う方法はありますか?

答えて

1

いいえ。ただし、空のファイルを1つだけ使用する回避策があります。

P2がファイルをスキャンしようとする前に、P1とP2の両方でよく知られている名前の空のファイルを作成します。 P2のスキャンを開始する前に、その空のファイルをロックし、ディレクトリのスキャンが終了したらロックを解除します(ファイルからデータを読み取っている間はロックを保持しないでください)。 P1が新しいファイルを作成する前に、その空のファイルをロックし、新しいファイルが作成された後にロックを解除します。がロックされています。

3

boost :: interprocess :: file_lock test_lock( "my_file")メソッドを使用してfile_lockを作成したときに、ファイル "my_file"を読み取り/書き込みから保護していないため、boost :: interprocess :: file_lockの目的を誤解しています。
を他のプロセスで書き込む場合、ファイル "my_file"を参照するロックがあると宣言します。他のプロセスも同じファイルを参照するロックを持っている場合、これらのロックの間で相互排除を実装できますが、 「Tは、私はあなたが競合状態を避けることができるはずだと思うどのようにファイルがちょうどフラグ

0

で、ファイルの読み取り/書き込み操作については、 『MY_FILE』を気にし、次のとおりです。

  1. P1はファイルを作成します
  2. P2ファイルには があります。ロックし、 b。読み込みを開始します。
  3. P1がファイルをロックしようとしましたが、待機しています。読み終わっ
  4. P2は、いくつかのデータ
  5. を書き込み
  6. P1は、ファイルに
  7. P1をロックしたファイルのロックを解除

は、それが明確でない場合は、私に教えてください。

おかげで、

Mohit

関連する問題