我怎么觉得这人把指令乱序和cache同步搞混了
"表面上看,r1==r2==0这种输出是不可能出现的,然而,有一种可能性是,由于r1不依赖于x,编译器可以把r1=y这步操作调整到x=1这步操作之前,同样,r2=x这步操作可以调整到y=1这步操作之前,这样一来,core 1可以先读取L1 cache中的y的值,core 2 才执行 y = 1的赋值操作,同理,r2 = x这步操作也可以在x=1这步赋值操作之前执行,这时候就会出现r1 == r2 ==0的输出结果。"
有两种可能都会出现这种情况,一种是他说的指令乱序,一种是thread1拿到的y,和thread2拿到的x都是cache中,两个线程对x,y的读写互相不可见。这人前面说了一段cache,cpu架构,然后又扯指令乱序,是不是没搞清楚。而且java里面处理这个情况,用volatile是最方便的,他竟然扯半天互斥锁。
【 在 z16166 的大作中提到: 】
: c++没有无脑的
: 这有篇中文帖子把基础的fence/barrier讲得还比较清楚的。
:
https://cloud.tencent.com/developer/article/1005903: ...................
--
修改:babyArm FROM 121.237.48.*
FROM 121.237.48.*