前提:不考虑多进程,仅关心单进程内的 多线程 与 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)
,是否也能保证访问到的是修改后的内容?
1
ty359 2023-11-08 15:57:50 +08:00
能说下你这是在什么场景下要这么使用么?完全没 get 到你想做啥,同一进程为啥要用 mmap 和磁盘文件传递数据。
|