最近、複数のプロセス (これらは MPI ベースの並列計算の一部) に分散されたデータを同じファイルに書き込むための、十分にテストされていないレガシー コードに出くわしました。これは実際に動作することが保証されていますか?
こんなふうになります:
すべてのプロセスが書き込み用に同じファイルを開きます。
各プロセスは
fseek
、ファイル内の異なる場所をシークするために呼び出します。この位置は、ファイルの末尾を超えている可能性があります。次に、各プロセスは、データのブロックをファイルに書き込みます
fwrite
。シーク位置とブロック サイズは、これらの書き込みがファイルのセクションを完全にタイル化するようなものです (ギャップやオーバーラップはありません)。
これは動作することが保証されていますか、それとも時々ひどく失敗しますか? 書き込みをシリアル化するためのロックはなく、実際には同期ポイントから開始される可能性があります。一方、複数のプロセスから「ファイルの最後」に書き込もうとして問題があった他の質問とは異なり、それらが異なるファイル位置に書き込んでいることを保証できます。
プロセスは、NFS 経由でファイルをマウントする別のマシン上にある可能性があると思います。これはおそらく私の質問に答えると思いますが、ファイルがローカルの場合は機能しますか?