如何使mmap共享内存多处理器计算机上的缓存无效

问题描述

我有两个过程,共享一个内存区域以进行快速通信。这两个进程都运行以下命令(已删除错误检查):

int fd = open("/run/afile",O_RDWR );
void *ptr = mmap(NULL,4096,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
volatile struct data *shared_data = (struct data *) ptr;

mmap由先前创建的文件/ run / afile支持((/ run作为tempfs挂载,我假设'afile'位于RAM中)

进程A像这样写数据:

data->field1 = 34;
data->field2 = 231;
data->new_data_flag = 1;

进程B在某些时候检查data->new_data_flag,然后读取data->field1data->field2

问题是,如何强制更新共享内存区域,以便更改对于流程B可见?

我知道msync()将更新/run/afile;这会自动使流程B缓存在其自己的/run/afile映射上失效吗?

侧面问题:我在volatile上使用struct data,以防止编译器将对field1field2new_data_flag的写入重新排序。这是正确的吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...