我有一个生产者进程,它写入一个mmap文件,而一个消费者进程则从中读取。这是在Linux上。
如果生产者对mmap进行了更改,但没有立即刷新,那么当消费者访问它时会发生什么?它会从磁盘中获得旧版本吗,或者它是否足够聪明,可以获得未刷新的页面?
发布于 2011-04-13 18:13:06
从mmap()
manual page
MAP_SHARED
与映射此对象的所有其他进程共享此映射。存储到区域相当于写入文件。在调用msync(2)或munmap(2)之前,可能不会实际更新文件。
底线:如果您在调用mmap()
时指定了更改,其他进程将立即可以看到更改。根据文档,您必须使用MAP_SHARED
或MAP_PRIVATE
,这两种方法控制映射相同文件区域的其他进程的行为。
https://stackoverflow.com/questions/5647269
复制相似问题