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

时间:2011-04-13 09:47:29

标签: c++ linux mmap producer-consumer

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

如果生产者对mmap进行了更改并且没有立即刷新,那么当消费者访问它时会发生什么?它会从磁盘上获取旧版本,还是能够获得未刷新的页面?

1 个答案:

答案 0 :(得分:2)

来自mmap() manual page

  

MAP_SHARED

     

与映射此对象的所有其他进程共享此映射。   存放到该地区相当于   写入文件。该文件可能不会   实际上会更新,直到msync(2)或   munmap(2)被称为。

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