2011-04-13 46 views
2

我有一个生产者进程,它写入一个mmap'd文件和一个从中读取的消费者进程。这是在Linux上。从另一个进程读取未刷新页面

如果生产者对mmap进行更改并且不立即刷新,当消费者访问它时会发生什么?它会从磁盘获得旧版本,还是足够聪明以获得未刷新的页面?

回答

2

mmap() manual page

MAP_SHARED

分享该映射与此映射对象的所有其它过程。 存储到该区域相当于写入文件的 。文件可能不会 实际更新,直到msync(2)或 munmap(2)被调用。

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

+0

因此,虽然进程之间的更改立即传播,但磁盘可能实际上并未收到更改,直到稍后或调用“msync”时。 – CMCDragonkai 2017-11-08 13:29:35