在JLS的第17章中,它引入了一个概念:发生在一致之前.
如果对于A中的所有读取r,其中W(r)是r看到的写入动作,那么一组动作A发生 - 在一致之前,不是hb(r,W(r))或那里的情况在A中存在写w,使得wv = rv和hb(W(r),w)和hb(w,r)"
在我的理解中,它等于以下几个词:...,既不是......也不是......
所以我的前两个问题是:
它还给出了一个例子:17.4.5-1
Thread 1 Thread 2
B = 1; A = 2;
r2 = A; r1 = B;
Run Code Online (Sandbox Code Playgroud)
在第一个执行顺序中:
1: B = 1;
3: A = 2;
2: r2 = A; // sees initial write of 0
4: r1 = B; // sees initial write of 0
Run Code Online (Sandbox Code Playgroud)
订单本身已经告诉我们两个线程交替执行,所以我的第三个问题是:左数是什么意思?
在我的理解中,r2和r1的原因可以看出0的初始写入是A和B都不是volatile字段.所以我的第四个问题是:我的理解是否正确?
在第二个执行顺序中:
1: r2 = A; // sees write of A = 2
3: r1 = B; // sees …Run Code Online (Sandbox Code Playgroud) 我已经用谷歌搜索了这个问题,以清除一些基本概念,但是没有找到合适的答案。
Swift编译器和Apple LLVM(Objective-C)的Xcode构建设置中有多少优化级别可用于代码生成?