对内存屏障的理解
朽木可雕 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)不再能出现了