如果我使用普通的 IO API 读取和写入单个文件,则可以保证写入在每个块的基础上都是原子的。也就是说,如果我的写入只修改了一个块,操作系统保证要么写入整个块,要么什么都不写入。
如何在内存映射文件上实现相同的效果?
内存映射文件只是字节数组,因此如果我修改字节数组,操作系统无法知道我何时认为写入“完成”,因此它可能(即使不太可能)换出内存中的内存在我的块写入操作的中间,实际上我写了半个块。
我需要某种“进入/离开临界区”,或者在写入文件时将文件的页面“固定”到内存中的某种方法。存在这样的东西吗?如果是这样,是否可以跨常见的 POSIX 系统和 Windows 移植?