Law*_*Dol 9 java synchronization
我今天一直在研究Java内存模型,以便详细了解JMM pre-Java 5的问题以及Java 5中实现的JSR-133所做的更改.
我似乎无法找到明确答案的是特定同步所需的缓存失效和刷新的范围.
进入代码的任何同步部分时所有CPU寄存器和高速缓存都必须无效,并且在离开时全部刷新到主RAM,或者JVM是否只允许实际读取的那些变量无效,并且只刷新在同步代码块中实际写入的那些?
如果是前者,为什么JMM如此迂腐,坚持认为内存屏障只发生在同一个对象同步的两个线程之间?
如果是后者,是否有任何好的文件解释了如何实现这一目标的细节?(I将假设底层实现将具有在在同步块的开始CPU级别设定"旁路缓存"标志和结束时清除它,但我可能是方式关闭基地.)