在JLS的第17章中,它引入了一个概念:一致性之前发生。
如果对于A中的所有读取r,其中W(r)是r看到的写动作,则不是发生hb(r,W(r))或在A中存在一个写w,使得wv = rv和hb(W(r),w)和hb(w,r)”
以我的理解,它等同于以下词语:...,在这种情况下,...和...都不
所以我的前两个问题是:
我的理解正确吗?
“ wv = rv”是什么意思?
它还给出了一个示例:17.4.5-1
Thread 1 Thread 2
B = 1; A = 2;
r2 = A; r1 = B;
按照第一个执行顺序:
1: B = 1;
3: A = 2;
2: r2 = A; // sees initial write of 0
4: r1 = B; // sees initial write of 0
该命令本身已经告诉我们两个线程是交替执行的,所以我的第三个问题是:左数是什么意思?
以我的理解,r2和r1都能看到初始写入0的原因是A和B都不是易失字段。所以我的第四个问题是:我的理解是否正确?
按照第二个执行顺序:
1: r2 = A; // sees write of A = 2
3: r1 = B; // sees write of B = 1
2: B = 1;
4: A = 2;
根据一致性之前发生的定义,不难理解这种执行顺序是一致性之前发生的(如果我的第一理解是正确的)。所以我的第五和第六个问题是:现实世界中是否存在这种情况(读后看写)?如果可以,您能给我一个真实的例子吗?
缥缈止盈
Cats萌萌
相关分类