2
我有一个生产者进程,它写入一个mmap'd文件和一个从中读取的消费者进程。这是在Linux上。从另一个进程读取未刷新页面
如果生产者对mmap进行更改并且不立即刷新,当消费者访问它时会发生什么?它会从磁盘获得旧版本,还是足够聪明以获得未刷新的页面?
我有一个生产者进程,它写入一个mmap'd文件和一个从中读取的消费者进程。这是在Linux上。从另一个进程读取未刷新页面
如果生产者对mmap进行更改并且不立即刷新,当消费者访问它时会发生什么?它会从磁盘获得旧版本,还是足够聪明以获得未刷新的页面?
MAP_SHARED
分享该映射与此映射对象的所有其它过程。 存储到该区域相当于写入文件的 。文件可能不会 实际更新,直到msync(2)或 munmap(2)被调用。
底线:如果在调用mmap()
时指定了更改,其他进程将立即看到更改。根据您的文档有可以使用MAP_SHARED
或MAP_PRIVATE
,它控制与其他进程映射相同文件区域的行为。
因此,虽然进程之间的更改立即传播,但磁盘可能实际上并未收到更改,直到稍后或调用“msync”时。 – CMCDragonkai 2017-11-08 13:29:35