对内存屏障的理解

朽木可雕 朽木可雕 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
看解密内存屏障(注释补充)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)不再能出现了
...全文
评论 1
收藏 已收藏
分享
返回顶部
朽木可雕
Linux_Kernel 4,469 成员 17,458 内容