我正在寻找一种方法以不受竞争条件影响的方式将文件大小增加到至少 N 个字节。
当然,简单的方法有一个竞争条件:
LARGE_INTEGER large_int;
GetFileSizeEx(handle, &large_int);
if (large_int.QuadPart < N) {
SetFilePointerEx(handle, N, 0, FILE_BEGIN);
SetEndOfFile(handle);
}
有任何想法吗?
编辑:详细说明比赛条件:
初始文件大小为零。Alice 想要将大小设置为至少 100。Bob 想要将大小设置为至少 200。很明显,如果没有竞态条件,那么当 Alice 和 Bob 都完成时,文件的大小必须为至少200。
假设 Alice 和 Bob 都将当前文件大小读取为零。然后 Bob 看到他需要将大小增加到 200,因此他将大小设置为 200。现在 Alice 开始运行,她得出结论 100 大于零,她认为这是当前大小,然后她设置大小为 100。