从另一个进程读取未刷新的页面

我有一个生产者进程,写入一个mmap'd文件和一个读取它的消费者进程。 这是在Linux上。

如果生产者改变了mmap,而不是立即刷新,当消费者访问它会发生什么? 它会从磁盘上得到旧版本,还是足够聪明,得到不刷新的页面?

mmap()手册页 :

MAP_SHARED

将此映射与映射此对象的所有其他进程共享。 存储到该区域相当于写入文件。 在调用msync(2)或munmap(2)之前,文件可能不会实际更新。

底线:如果您在调用mmap()时指定了更改,则其他进程将立即显示更改。 根据文档,您必须使用MAP_SHAREDMAP_PRIVATE ,它控制与其他进程映射相同文件区域的行为。