競合状態に悩まされない方法で、ファイルのサイズを少なくともNバイトに増やす方法を探しています。
単純なアプローチには、競合状態があります。
LARGE_INTEGER large_int;
GetFileSizeEx(handle, &large_int);
if (large_int.QuadPart < N) {
SetFilePointerEx(handle, N, 0, FILE_BEGIN);
SetEndOfFile(handle);
}
何か案は?
編集:競合状態の詳細:
初期ファイルサイズはゼロです。アリスはサイズを少なくとも100に設定したいと考えています。ボブはサイズを少なくとも200に設定したいと考えています。競合状態がなかったことは明らかです。アリスとボブの両方が終了したら、ファイルのサイズは次のようになります。少なくとも200。
アリスとボブの両方が現在のファイルサイズをゼロとして読み取ると仮定します。次に、ボブはサイズを200に増やす必要があることを確認したので、サイズを200に設定しました。アリスは実行を開始し、100はゼロより大きいと結論付けます。これは現在のサイズであると考えてから、サイズを100にします。