当前位置:  开发笔记 > 编程语言 > 正文

在Java中编写long和double并不是原子的?

如何解决《在Java中编写long和double并不是原子的?》经验,为你挑选了2个好方法。

它不是原子的,因为它是机器代码级别的多步操作.也就是说,longs和double都比处理器的字长更长.



1> Don Branson..:

它不是原子的,因为它是机器代码级别的多步操作.也就是说,longs和double都比处理器的字长更长.


取决于语言,我想.我很确定Java的原始类型在所有机器上都保证是特定的长度.
对.在64位长64位的机器上,写长可能*将是原子的,除非你在谈论JVM或其他东西.
.NET框架的"基元"也设置为特定的位长度,而不是多个字节.int是Int32的同义词,它总是32位...
注意:在java中,int是32位,long是64位(无论处理器架构如何),原始问题与java有关,也许后来添加了标签.我不确定,无论是在64位处理器上,写入是否是原子的.它将依赖于JVM到JVM.

2> daveb..:

只是为了澄清Java的情况,除非声明它们,否则不会以原子方式读取或写入双精度数和长数 volatile

JLS - 双和长的非原子疗法


这些操作在64位JVM中是原子操作,这是当前的常态
@AmrishPandey*这些操作在64位JVM中是原子的*请您分享支持链接或进一步阅读网址?
为了支持Amrish,我观看了一个有Cliff Click和Doug Lea的演示文稿(小组讨论),Cliff提出了这个观点,即在64位JVM上实现双倍和长效.所以是的Java内存模型说我们在long上严格需要volatile for atomic ops,但在64位JVM上却不是这样.
/sf/ask/17360801/.它们在Java中不是原子的,但它们在64位JVM中是原子的.如果您可以忽略32位JVM,则可以将它们视为原子.当然,如果32位JVM尝试运行您的代码,它可能会观察到[可能的并发症](http://archive.is/PuaaF#selection-8437.50-8437.73).
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有