9

プロセスによってboost::interprocess::file_lockディレクトリに書き込まれたファイルが完了するまでプロセスによって読み取られないようにするために使用したいと思います。これを行うには、書き込み中にファイルをロックし、完了したらロックを解除したいと思います。次に、ロックされているファイルをスキップする (そして戻ってくる) ことができます。xP1P2P1boost::interprocess::file_lockP2

私が抱えている問題はboost::interprocess::file_lock、存在するファイルのみをロックできるように見えることです。しかし、最初にファイルを作成してからロックすると、競合状態が発生します。

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

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

4

3 に答える 3

5

boost::interprocess::file_lock の目的を誤解しています。boost::interprocess::file_lock test_lock("my_file") メソッドを使用して file_lock を作成すると、
他のプロセスによる読み取り/書き込みからファイル "my_file" を保護していません。 、ファイル「my_file」を参照するロックがあることを宣言するだけです。他のプロセスにも同じファイルを参照するロックがある場合、これらのロック間の相互排除を実装できますが、これらのロックは読み取りを気にしません/ファイル「my_file」に対する書き込み操作、ファイルは単なるフラグです

于 2013-12-21T13:41:53.840 に答える
2

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

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

于 2012-11-15T18:15:20.517 に答える