前提:不考虑多进程,仅关心单进程内的 多线程 与 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),是否也能保证访问到的是修改后的内容?