如果我使用普通IO API读写单个文件,每块写操作都保证是原子性的。也就是说,如果我的写操作仅修改一个块,操作系统保证要么整个块被写入,要么什么都不写。
那么,如何在内存映射文件上实现相同的效果呢?
内存映射文件只是字节数组,所以如果我修改字节数组,操作系统无法知道何时认为写操作“完成”,因此它可能(尽管可能性很小)会在我块写操作的中途交换内存,从而实际上只写了半个块。
我需要一种“进入/退出关键部分”的方法,或者一种将文件页“固定”在内存中的方法,以便在写入时将其锁定。类似这样的方法是否存在?如果是这样,是否可以在常见的POSIX系统和Windows上可移植使用?