首页 > 解决方案 > 为什么 MAP_SHARED 标志使其他进程立即可见?

问题描述

void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);

使用该mmap方法时,flags 参数为MAP_SHARED. 人人都说一个流程修改后,其他流程立即可见,那为什么其他流程立即可见呢?不考虑 CPU 缓存线?

标签: mmap

解决方案


更改不一定立即可见。在任何多线程场景中,您都必须使用适当的内存同步/排序工具。这通常涉及原子操作和相关的内存栅栏,正是这些操作解决了围绕缓存一致性、回写缓冲区等的同步问题。

有关“C”中内存顺序语义的详细信息,请查看此处


推荐阅读