我最近遇到了一些未经充分测试的遗留代码,用于将分布在多个进程(这些是基于 MPI 的并行计算的一部分)的数据写入同一个文件。这真的可以保证工作吗?
它是这样的:
所有进程都打开同一个文件进行写入。
每个进程调用
fseek
以寻找文件中的不同位置。此位置可能超出文件末尾。然后每个进程将一个数据块写入文件中
fwrite
。查找位置和块大小使得这些写入完全平铺文件的一部分——没有间隙,没有重叠。
这能保证工作,还是有时会严重失败?没有锁定来序列化写入,实际上它们很可能是从同步点开始的。另一方面,我们可以保证它们正在写入不同的文件位置,这与尝试从多个进程写入“文件末尾”时遇到问题的其他问题不同。
我突然想到,这些进程可能位于通过 NFS 挂载文件的不同机器上,我怀疑这可能回答了我的问题——但是,如果文件是本地的,它会工作吗?