mmap - 为什么 MAP_SHARED 标志使其他进程立即可见?
问题描述
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);
使用该mmap
方法时,flags 参数为MAP_SHARED
. 人人都说一个流程修改后,其他流程立即可见,那为什么其他流程立即可见呢?不考虑 CPU 缓存线?
解决方案
更改不一定立即可见。在任何多线程场景中,您都必须使用适当的内存同步/排序工具。这通常涉及原子操作和相关的内存栅栏,正是这些操作解决了围绕缓存一致性、回写缓冲区等的同步问题。
有关“C”中内存顺序语义的详细信息,请查看此处。
推荐阅读
- java - 为什么无法从数据库 Firebase 读取数据?
- rascal - CodeMirror 未在更改时更新源
- mysql - 发生日期差异时SQL将日期与ID进行比较
- slack-api - 范围更改时强制重新安装?
- python - 致命的 Python 错误:_Py_HashRandomization_Init:无法获取随机数来初始化 Python
- android - 删除 Jetpack Compose 中的 LazyColumn 过度滚动效果
- r - R:将R中的日期格式从同一天的01:00更改为24:00
- ruby - 无法将现有付款资料设置为客户的默认付款资料
- python - 遍历字典以从键值对中查找值
- html - 当我更改窗口大小时,为什么我的正文文本与我的图像重叠?