问题描述
我有两个过程,共享一个内存区域以进行快速通信。这两个进程都运行以下命令(已删除错误检查):
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->field1
和data->field2
问题是,如何强制更新共享内存区域,以便更改对于流程B可见?
我知道msync()
将更新/run/afile
;这会自动使流程B缓存在其自己的/run/afile
映射上失效吗?
侧面问题:我在volatile
上使用struct data
,以防止编译器将对field1
,field2
和new_data_flag
的写入重新排序。这是正确的吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)