据我所知,干将也应该是同步的,但下面的代码给出爪哇 - 不同步的getter
Object get() { return val; }
synchronized void set(Object val) { ... }
如何编译搞砸一个简单的return语句,这是原子(从MEM简单的读)?它与每个处理器缓存有关吗?
据我所知,干将也应该是同步的,但下面的代码给出爪哇 - 不同步的getter
Object get() { return val; }
synchronized void set(Object val) { ... }
如何编译搞砸一个简单的return语句,这是原子(从MEM简单的读)?它与每个处理器缓存有关吗?
在这种情况下,声明成员变量val
为volatile
就足够了。
问题是知名度之一。没有内存屏障,不能保证一个线程写入的更改对另一个线程可见。如果没有障碍,JVM可以进行优化,例如缓存寄存器中成员变量的值,而不是将更改写入全局可见的主内存中。
你是什么意思_如何编译器搞砸了一个简单的return statement_? –
对我来说很不清楚。 –
你为什么认为getters应该始终保持同步? – Mureinik