【发布时间】:2011-04-13 09:47:29
【问题描述】:
我有一个生产者进程,它写入一个 mmap'd 文件和一个从中读取的消费者进程。这是在 Linux 上。
如果生产者对 mmap 进行了更改并且它没有立即刷新,那么当消费者访问它时会发生什么?它会从磁盘中获取旧版本,还是足够聪明地获取未刷新的页面?
【问题讨论】:
标签: c++ linux mmap producer-consumer
我有一个生产者进程,它写入一个 mmap'd 文件和一个从中读取的消费者进程。这是在 Linux 上。
如果生产者对 mmap 进行了更改并且它没有立即刷新,那么当消费者访问它时会发生什么?它会从磁盘中获取旧版本,还是足够聪明地获取未刷新的页面?
【问题讨论】:
标签: c++ linux mmap producer-consumer
MAP_SHARED
与映射此对象的所有其他进程共享此映射。 存储到区域相当于 写入文件。该文件可能不 实际上会更新到 msync(2) 或 munmap(2) 被调用。
底线:如果您在调用mmap() 时指定,其他进程将立即看到更改。根据文档,您必须使用MAP_SHARED 或MAP_PRIVATE,它们控制与映射同一文件区域的其他进程有关的行为。
【讨论】:
msync 时才能真正接收到更改。