【发布时间】:2011-04-15 03:08:14
【问题描述】:
如果我使用普通 IO API 读取和写入单个文件,则可以保证写入在每个块的基础上是原子的。也就是说,如果我的写入只修改了一个块,操作系统保证要么写入整个块,要么什么都不写入。
如何在内存映射文件上实现相同的效果?
内存映射文件只是字节数组,所以如果我修改字节数组,操作系统无法知道我何时认为写入“完成”,因此它可能(即使不太可能)换出内存就在我写块操作的中间,实际上我写了半个块。
我需要某种“进入/离开临界区”,或者在写入文件时将文件的页面“固定”到内存中的某种方法。存在这样的东西吗?如果是这样,是否可以跨常见的 POSIX 系统和 Windows 移植?
【问题讨论】:
-
有多少应用程序正在与您的映射文件进行交互?
-
只有一个进程,即数据库服务器。