在x86处理器上没有用的易失性

pde*_*eva 0 java concurrency synchronization volatile

我在某处读到x86处理器具有高速缓存一致性,并且可以在每次写入时同步多个内核的字段值.

这是否意味着如果我们计划仅在x86处理器上运行,我们可以在不使用java中的'volatile'keywoard的情况下进行编码?

更新:

好吧,假设我们忽略了指令重新排序的问题,我们是否可以假设在x86处理器上不存在对核心不可见的非易失性字段的分配问题?

Meh*_*dad 6

不 - volatile关键字比缓存一致性具有更多含义; 它还限制了运行时可以做什么和不能做什么,比如延迟构造函数调用.


Voo*_*Voo 5

关于您的更新:不,我们不能.其他线程可以在不更新变量的情况下读取陈旧值.另一个问题是:只要能够保证单线程行为是正确的,JVM就可以优化代码.

这意味着:

public boolean var = true;
private void test() {
    while (var) {
       // do something without changing var
    }
}
Run Code Online (Sandbox Code Playgroud)

可以通过JIT优化,而(如果想要的话)!