1

次の例外を時折散発的にスローするコードに問題があります。

boost interprocess: no such file or directory

同じファイル セットにアクセスするコードは複数ありますが、一部のコードはリアルタイムでファイルを別のディレクトリに移動します。ファイルを処理および移動するコードは、ファイルロックを使用しています。

boost::interprocess::file_lock

コードで行われるプロセスは次のとおりです。1) プログラム 1 は、ロックしたいファイルが存在することを確認します。2) 上記のチェックに合格すると、file_lock を使用してファイルをロックします。

問題は、ステップ 1 と 2 の間で、プログラム 2 がプログラム 1 が作業しているファイルに対して boost::filesystem::rename を使用して移動できることだと思います。

両方のプログラムが同時に実行されている場合、これを防ぐ方法はありますか?

4

1 に答える 1

1

ロックする前にファイルが存在するかどうかを確認しません。代わりに、ロックしてみてください。ファイルが存在しない場合、Boost はinterprocess_exceptionファイルがロックされていることを警告します。

于 2012-06-27T04:41:27.327 に答える