对内存屏障的理解

朽木可雕 2018-09-11 03:04:45
看解密内存屏障(注释补充)https://my.oschina.net/lday/blog/689639#comments引出的一个问题
void run1()
{
x = 1;
//CPU内存屏障,保证x=1在r1=y之前执行
__asm__ __volatile__("mfence":::"memory");
r1 = y;
}

//thread 2
void run2
{
y = 1;
//CPU内存屏障,保证y = 1在r2 = x之前执行
__asm__ __volatile__("mfence":::"memory");
r2 = x;
}

我的理解当mfence的时候刷新当前CPU的Writebuffer和使无效当前CPU的Dcache
这样当读取写x和y的时候相当于直写没有缓存,r2和r1读取的时候也是从内存中直接读取

按照这个理解
r1 , r2可能的值是(0,1) (1,0) (1,1),只是(0,0)不再能出现了
...全文
997 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2018-09-30
  • 打赏
  • 举报
回复
结论是对的,不会出现0,0

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧