前提:不考虑多进程,仅关心单进程内的 多线程 与 flag 设为MAP_PRIVATE
,权限设为PROT_READ
和PROT_WRITE
的 映射到磁盘上具体文件 的 mmap 区域进行交互。
任意线程修改映射区数据后,其他线程能立刻看到修改的结果吗?
相比于 “在堆上分配的内存中 存储新值,并利用 fwrite 写入磁盘,再用 设为 MAP_SHARED
的 mmap 查看修改结果的方式。”,
在设为 MAP_PRIVATE
的 mmap 区域上修改内容,再利用 fwrite 写入磁盘的方式 会否更有效率,或更差?
虽然 man 文档中,对于 MAP_PRIVATE
有如下描述 “It is unspecified whether changes made to the file after the mmap() call are visible in the mapped region.”,
但如果采用 问题 2 的方式修改磁盘文件,即使对被修改的区域调用 madvise(MADV_DONTNEED)
,是否也能保证访问到的是修改后的内容?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.