2

我有一个关于 mmap 功能的问题。当 mmap 在内核负责将数据持久保存到磁盘上的映射文件的异步模式下使用时,是否可以让以前的更新覆盖以后的更新?

假设在时间 T,我们修改内存中的一个位置,该位置是内存映射到磁盘上的文件,然后在时间 T+1 我们再次修改内存中的相同位置。由于对文件的写入不是同步的,内核是否有可能首先在时间 T+1 获取修改,然后在时间 T 获取修改,从而导致内存映射文件不一致?

4

1 回答 1

0

这并不完全可能。在msync(2)munmap(2)之前,允许文件不一致- 当这种情况发生时,(修改)页面被逐页写入磁盘(有时更多,取决于较新内核中的文件系统)。msync() 允许您指定写入完成后缓存的同步操作和失效,这使您可以确保缓存中的数据与文件中的数据相同。否则,您的程序可能会看到较新的数据,但文件包含较旧的数据 - 相当复杂的情况的确切细节取决于 CPU 架构和这些例程的特定操作系统实现。

于 2012-07-13T01:42:13.180 回答