带有MAP_PRIVATE的 mmap 区域如何处理常规文件?

How do mmap region with MAP_PRIVATE work with a regular file?

提问人:da capo 提问时间:11/8/2023 更新时间:11/8/2023 访问量:13

问:

前提:适用于 Linux。无需考虑多处理。只关心同一进程中的多线程处理,并与映射到磁盘上特定文件的 mmap 区域进行交互,并将标志设置为 和 。MAP_PRIVATEPROT_READPROT_WRITE

问题:

  1. 如果一个线程修改了映射区域中的数据,其他线程可以立即看到修改的结果吗?

  2. 与“将新值存储在堆上分配的内存中,用于写入磁盘,然后使用 mmap 区域查看修改结果”相比,修改 mmap 区域上的内容,然后使用同步到磁盘效率更高,还是更糟?fwriteMAP_SHAREDMAP_PRIVATEfwrite

  3. 虽然 man 文档对“未指定 mmap() 调用后对文件所做的更改是否在映射区域中可见”有如下描述,但如果磁盘文件以问题 2 的方式被修改,即使磁盘文件被修改并在该区域被调用,是否能保证修改后的内容会被访问?MAP_PRIVATEmadvise(MADV_DONTNEED)

背景:

  1. 已经读过mmap的人了。
  2. 我知道正常的使用方式是使用 file 和 .MAP_SHAREDMAP_PRIVATEMAP_ANONYMOUS
  3. 已经在 stackoverflow 上检查了相关问题。
Linux 数据库 多线程 MMAP

评论


答: 暂无答案