两个进程打开同一个文件进行写入

Dig*_*Eye 4 c++ windows parallel-processing

当两个进程同时打开一个不存在的文件进行写入时会发生什么?即考虑在两个并发进程中运行的C++代码

ofstream ofs("/ my/test/path/some_file")

操作系统会序列化实际的文件创建吗?

PS:我在Windows上编码,所以我主要想看看Windows会做什么,但我很想知道这里的行为是否依赖于os.

Sam*_*hik 6

关于打开相同文件进行写入的两个进程没什么特别令人兴奋的.

当这些进程尝试写入同一文件时,有趣的部分开始.操作系统不打算作为裁判.每个单独的进程都将由操作系统安排在操作系统感觉到它时执行.无论进程在其时间片段内做什么,操作系统通常会不受影响.一个进程可能会向文件写入一些内容,然后另一个进程可能会写入某些内容,或者可能不会.取决于代码的作用.

因此,除非采用明确的步骤,以某种方式使多个进程协调对文件的访问,否则无法预测多个进程写入文件的最终结果.电脑不会着火或内爆,世界不会走到尽头.但是,每次重复这个实验,结果都会有所不同.

  • 在 Windows 中,这取决于选择的共享模式。除非两个程序都在启用写共享的情况下打开文件,否则只有其中一个程序会成功打开文件进行写入。默认情况下,`ofstream` 构造函数不太可能启用写共享。 (2认同)