【问题标题】:Reading unflushed page from another process从另一个进程读取未刷新的页面
【发布时间】:2011-04-13 09:47:29
【问题描述】:

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

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

【问题讨论】:

    标签: c++ linux mmap producer-consumer


    【解决方案1】:

    来自mmap() manual page

    MAP_SHARED

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

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

    【讨论】:

    • 因此,虽然进程之间的更改会立即传播,但磁盘可能要等到稍后或调用 msync 时才能真正接收到更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多