Linux上文件IO(和其他与操作系统相关的操作)的顺序一致性

时间:2016-11-03 07:44:04

标签: c++ linux file synchronization multiprocessing

我想知道多个进程/线程的文件IO操作是否保证在Linux上是顺序一致的。如果不是(如this thread所述),我应该如何编码以确保它们是连续一致的?请考虑以下示例,其中FILE_1FILE_2是具有绝对路径的两个不同文件名,其中进程A和B都具有读写访问权限。

流程A首先创建FILE_1,然后创建FILE_2

FILE* fp1A = fopen(FILE_1, "w");
fclose(fp1A);
FILE* fp2A = fopen(FILE_2, "w");
fclose(fp2A);

流程B首先读取FILE_2,如果成功,则读取FILE_1

FILE* fp2B = fopen(FILE_2, "r");
if (fp2B != NULL) {
    FILE* fp1B = fopen(FILE_1, "r");
    // QUESTION: is fp1B guaranteed to be not NULL here?
}

上述评论给出了问题。换句话说,如果一个进程按照其源代码指定的给定顺序执行某些文件IO操作,那么所有其他进程是否会以相同的顺序查看这些操作对系统的影响?这是否由某些标准(POSIX等)或实现定义保证?

如果我将“文件IO”更改为在更广泛意义上对系统产生一些明显影响的其他操作(例如更改内核参数),该怎么办?

背景:我一直在研究C ++ 11线程模型中的内存排序。但这些概念仅涉及内存而非OS功能,如文件IO。我理解这是因为它是一个独立于OS的语言标准。所以我想知道是否有其他标准为操作系统提供类似的概念。

0 个答案:

没有答案