在x86处理器上是不可用的
我在某处读到x86处理器具有高速缓存一致性,并且可以在每次写入时同步多个内核的字段值。
这是否意味着如果我们计划仅在x86处理器上运行,我们可以在不使用java中的'volatile'keywoard的情况下进行编码?
更新:
好吧,假设我们忽略了指令重新排序的问题,我们是否可以假设在x86处理器上不存在对核心不可见的非易失性字段的分配问题?
没有找到相关结果
已邀请:
6 个回复
梆晨灸碾
关键字比缓存一致性具有更多含义;它还限制了运行时可以做什么和不能做什么,比如延迟构造函数调用。
舞备联
可以通过JIT优化,而(如果想要的话)!
扑北爱
和
之间有很大的不同。如果你有易失性,x86可以同步字段,否则它不会也不应该。 注意:易失性访问可能比非易失性访问慢10-30倍,这是一直没有完成的关键原因。 BTW:你知道任何多核,普通的x86处理器吗?我原以为大多数都是支持x86的x64。
茬贺努充尽
的非常准确的规范,以及它是否选择使用特定于cpu的指令来执行此操作,那么对您有好处。 唯一可以说“我们知道在这个平台上cpu表现得像......”的地方是在本地代码中链接它需要符合cpu的时候。在所有其他情况下写入规范。 请注意,volatile关键字对于编写在多个cpu上运行的健壮代码非常重要,每个cpu都有自己的缓存,因为它告诉JVM忽略本地缓存并从5分钟前获取官方值而不是缓存值。你通常想要这样。
藕挝
邦绊门蔽惩
。我一直处于这样的情况,其中一个线程对于变量具有'null'而另一个线程具有在该线程中设置的变量的适当值。调试并不好玩。对所有共享字段使用volatile :)