美文网首页
非原子的64位操作

非原子的64位操作

作者: 生活简单些 | 来源:发表于2018-03-25 15:19 被阅读17次

Java在多线程情况下访问外部一个基本变量,如果不加volatile可能读到的值是失效的,但至少是之前某个线程设置的值,不是一个无从生有的值。
但这只是针对int,float, boolean 这类32位的变量类型来说的,如果遇到64位的long和double,JVM读取它们是可能分解成2个32位的来运算的,读取和设置都是可能拆分进行的,所以没有volatile修饰,读到的高位32位和地位32位值有可能不属于同一个long或double的,结果会给人呈现读到来一个不存在的值的幻想。
所以多线程访问外部变量都要加volatile,尤其double和long这种64位的类型,当然也可以用锁来锁住操作的方法。

相关文章

  • 原子操作 vs 非原子操作

    今天我又要给大家讲到C++11了,不喜欢的或者认为其过时了的小伙伴可以选择不看,但是我还是希望能对大家学习c/c+...

  • iOS内存管理(二)属性关键字

    原子性操作关键字 nonatomic:非原子的, atomiac 原子的 。属性默认是 atomiac , 也就是...

  • 2022加油(fmy)

    2022加油(fmyz) 一、基础 1.说出常用的属性修饰关键字 原子性和非原子性 nonatomic 非原子操作...

  • 2018-05-22

    nonatomic的内存管理语义是非原子性的,非原子性的操作本来就是线程不安全,而atomic的操作是原子性的,但...

  • iOS nonatomic与atomic

    nonatomic的内存管理语义是非原子性的,非原子性的操作本来就是线程不安全,而atomic的操作是原子性的,但...

  • 2018-07-12

    volatile不能保证原子性,所以用它修饰的变量,如果执行非原子性操作,那不能保证线程安全,比如++操作,但是=...

  • 单核,多核,单线程,多线程,同步,异步的理论概念

    单核多核单线程多线程同步异步原子操作非原子操作并发串行分布式计算阻塞非阻塞 1、首先明确一点,对于单核CPU,任意...

  • 关键字

    nonatomic:非原子操作,决定编译器生成的set、get方法是否是原子操作,set方法的实现不加锁,比ato...

  • Java并发编程:深入理解CAS、Atomic原子操作和vola

    转自《深入理解Atomic原子操作和volatile非原子性》https://blog.csdn.net/wbb_...

  • 2018-02-28线程-线程池

    volatile 不能保证一般变量的操作原子性原因是由于 volatile 不能保证非原子性操作的一致性,eg变量...

网友评论

      本文标题:非原子的64位操作

      本文链接:https://www.haomeiwen.com/subject/exnhcftx.html