mmap写入磁盘上的文件(同步/异步)

时间:2010-02-09 04:25:22

标签: mmap synchronous

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

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

1 个答案:

答案 0 :(得分:0)

这不太可能。文件 允许不一致,直到 msync(2) munmap(2) - 当发生这种情况时,(已修改的)页面逐页写入磁盘(有时更多,取决于较新内核中的文件系统)。 msync()允许您在完成写入后指定高速缓存的同步操作和失效,这允许您确保高速缓存中的数据与文件中的数据相同。如果没有这个,你的程序可能会看到更新的数据,但文件包含更旧的 - 相当毛茸茸的情况的确切细节取决于CPU架构和这些例程的特定操作系统实现。