我有一个生成器进程,它写入mmap'd文件和从中读取的消费者进程。这是在Linux上。
如果生产者对mmap进行了更改并且没有立即刷新,那么当消费者访问它时会发生什么?它会从磁盘上获取旧版本,还是能够获得未刷新的页面?
答案 0 :(得分:2)
MAP_SHARED
与映射此对象的所有其他进程共享此映射。 存放到该地区相当于 写入文件。该文件可能不会 实际上会更新,直到msync(2)或 munmap(2)被称为。
底线:如果您在调用mmap()
时指定了更改,则其他进程将立即看到更改。根据您拥有的文档,使用MAP_SHARED
或MAP_PRIVATE
,它控制映射同一文件区域的其他进程的行为。