繁体   English   中英

原子读写long和double值

[英]Atomic read and write of long and double values

longdouble读写操作不是原子的,因为它们的大小超过cpu字大小。

如果我有64位机器,那么我可以获得longdouble原子读写操作吗?

如果我有64位机器,我可以获得long和double的原子读写操作吗?

答案是“也许”。 答案取决于JVM实现以及机器架构。 引用Java语言定义17.7

某些实现可能会发现将64位长或双值上的单个写操作划分为相邻32位值上的两个写操作很方便。 为了效率,这种行为是特定于实现的; Java虚拟机的实现可以自由地以原子方式或分两部分执行对long和double值的写入。

鼓励Java虚拟机的实现避免在可能的情况下拆分64位值。 建议程序员将共享的64位值声明为volatile或正确同步其程序以避免可能的复杂情况。

这是一个关于在读取和写入64位值时确保原子性的好页面。

直接回答这个问题,使用volatileAtomicLong会使实际的读/写原子。

但是,排除某些特定情况后,它们本身通常是不够的 - 也就是说它们确保读/写本身是原子的,但不保证程序是线程安全的。

要创建真正的原子用法,通常必须建立更大的原子上下文。 在最基本的形式中,这是通过synchronized完成的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM