1

私は C++ でモジュールを作成しています。このモジュールは、nfs マウント ファイル ストレージを備えたマシンのクラスター上で実行されます。

NFS 経由ですべてのマシンと共有される構成ファイルがあります。すべての人がそのファイルを読み書きできます。同時アクセスによるデータの破損がないことを確認するにはどうすればよいですか?

NFS がロック用の独自のプロトコルを持っていることは認識していますが、信頼性が低いことがわかります -同時 nfs アクセス。また、iNotify が nfs にマウントされたドライブではうまくいかないこともわかりました ( inotifiy の例)。書き込み/読み取りの前にファイルがアクセスされているかどうかを確認するのにstatが役立つかどうかはわかりません 。

同時アクセスを回避するために C++ で単純なロック メカニズムを実装するにはどうすればよいですか?

4

1 に答える 1

0

コンテンツ A、B、および C を NFS を介して共有されるファイルに同時に書き込む場合、最終的なコンテンツは ABC か、BAC、CAB などの ABC の可能な組み合わせのいずれかになります。ファイルは常に一貫性があります。 A を部分的に書き、その後に B を書き込んではいけません。これは、コンテンツ サイズが NFS ブロック サイズ内に収まる場合にのみ当てはまります。

書き込みがブロック サイズを超える場合は、NFS サーバーとクライアントの両方でロック デーモンを実行する必要がある NLM を使用する必要があります。

于 2012-07-09T20:45:06.347 に答える