【发布时间】:2019-12-22 11:11:12
【问题描述】:
我很想知道内核如何处理并发写入/访问通过mmap 创建的共享映射的详细信息。查看man pages,我看到的MAP_SHARED 如下:
分享此映射。对映射的更新可见 映射同一区域的其他进程,并且(在 文件支持的映射)被传递到底层 文件。 (精确控制何时进行更新 到底层文件需要使用msync(2)。)
但是,据我了解,msync 正在处理从页面缓存到底层存储设备的同步。但是,它似乎没有处理两个进程有mmaped 文件的情况。当两个进程同时写入映射区域时会发生什么?如果我创建了一个共享映射,我如何确定恰好映射同一个文件的不相关进程没有进行并发写入?
【问题讨论】: