我在java规范中看到这个:
如果x和y是同一个线程的动作,并且x在程序顺序中出现在y之前,则x发生在y之前.
还有这个
原始代码
线程1
r2 = A;
B = 1;
有效的编译器转换(允许编译器对任一线程中的指令重新排序,当这不影响该线程的独立执行时)
线程1
B = 1;
r2 = A;
我对这两件事很困惑.
如果动作x在动作y之前出现,那么x应该在y之前发生.如果我们认为对于y而言r2 = A而对于y则考虑B = 1,则r2 = A应该在B = 1之前发生.怎么会有任何重新排序,如果在y为真之前x发生,那么在r2 = A之前如何执行B = 1?
| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |