質問

ブーストファイルロック(Sharpanable and Scoped file_Locks)とファイルロックの一般的な戦略は、これだと思います。

  1. 開いた
  2. ロック
  3. ファイルコンテンツで動作します
  4. ロックを解除します
  5. ファイルを閉じます

ただし、Appendのファイルを開き、Tellpに電話して自分がどこにいるかを確認します。これは上記のシナリオで安全ですか?ファイルがロックの前に開かれているのですぐにファイルポインターが設定され、したがって潜在的に保護されていないでしょうか?もしそうなら、これを回避するための標準的なイディオムはありますか?

役に立ちましたか?

解決

これは環境固有かもしれませんが、プラットフォームの大部分では次のとおりです。

追加のファイルが開かれた場合、ファイルポインターは、書き込みたびにすぐに調整されます。したがって、使用する場合 tellp ファイルをロックする前に、新しく追加されたバイトがどこに行くのかはわかりませんが、ロックを使用して同じ範囲のバイトを追加する2つのプロセスはありません。

他のヒント

良いブーストドキュメントをお勧めします:http://www.boost.org/doc/libs/1_45_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.file_lock

読むことができる:

  • ファイルロックは、オペレーティングシステムがサポートしていてもオペレーティングシステムロックではありません(例:Windowsはい、Unixのような通常はありません)。したがって、ファイルをロックすると、他のプロセスが同じファイルロックメカニズムを使用しない限り、誰でも読み取り/書き込み/削除できます。したがって、実際のファイルロックではなく、インタープロセスミューテックスのように考えてください。
  • ファイルロックはインタープロセスの同期用であり、プロセス内で複数のスレッドを同期しません
  • フラッシング(ストリームのフラッシュ)を忘れないでください、だからあなたはバッファリングを心配する必要はありません

ああ、これはひどいです...私は助けたいと思っていました、私はサンプルコードを書きました、それを試してみました、そして... 1_44の時点でWin32のためにファイルロックが壊れています、フラッシングはロックされたファイルで動作しません。

申し訳ありませんが、私のせいではありません。

理論的には、それが役立つ場合:Applingのファイルを開くと、すべての書き込み操作の前に自動探索が終了することを意味します。書くことなくても、いつでもいつでも終了しようとすることを妨げることはありません。ただし、経験(上記を参照)は次のように述べています。壊れたものから離れてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top