美文网首页
原子访问

原子访问

作者: 原创迷恋者 | 来源:发表于2019-10-14 19:41 被阅读0次

在编程中,一个原子操作是指能一次发生的动作。一次原子操作不能被中途打断:它要么完全执行,要么根本不执行。原子操作的副作用必须在它结束之后,才能看到。

我们已经看到了一个自增操作,像是c++,不能被称作是一个原子操作。即使是翻唱简单的表示式,也能被拆解为若干动作。不过,以下的动作你可以称其为原子的:

  • 对引用变量和大部分基础变量(除了long和double),读或写操作是原子的。
  • 被声明成volatile的变量的读和写操作都是原子的,包括long和double。

原子操作互相不能重叠,因此无需担心它们会有线程混淆。但是,这并不意味着原子操作就不需要同步,因为内存一致性的问题仍然存在。使用volatile关键字可以减少内存不一致性错误的风险,因为写入任何以volatile修饰的变量,都会和之后对该变量的读建立起一个happens-before的关系。这意味着,对volatile变量的改动对其他线程也是可见的,它不仅能看到最新的变化,而且能看到由于这个变化给整个代码带来的影响。

与通过同步代码来进入这些变量相比,使用简单的原子变量准入是一个更有效的方法,但是后者需要开发人员更加小心地防止内存一致性问题。这种额外的努力是否值得取决于应用的大小和复杂性。

java.util.concurrent包中的一些类提供了不依赖于同步的原子方法。我们会在高级并发对象章节中学到。

相关文章

  • 原子访问

    在编程中,一个原子操作是指能一次发生的动作。一次原子操作不能被中途打断:它要么完全执行,要么根本不执行。原子操作的...

  • Objective-c 属性存取器@property默认属性

    原子性 nonatomic 非原子性访问 atomic 原子性访问,默认值 读写权限 readonly 只读 re...

  • 极简@property属性学习体会

    一,原子 1.atomic(默认):原子,单线程访问,加锁代码。 2.nonatomic:非原子,多线程访问,无加...

  • 第八章 用户模式下的线程同步

    8.1 原子访问:Interlocked系列函数 原子访问: 一个线程在访问某个资源的同时能够保证没有其他线程会在...

  • nonatomic、atomic

    nonatomic :非原子属性,它的特点是多线程并发访问性能高,但是访问不安全atomic:原子属性,特点就是保...

  • Java自学-多线程 原子访问

    多线程 原子访问 步骤 1 : 原子性操作概念 所谓的原子性操作即不可中断的操作,比如赋值操作 原子性操作本身是线...

  • C++原子性操作,volatile关键字

    原子性操作 原子性操作比加锁访问临界资源更加高效。现代CPU支持一些原子性操作 使用原子性操作实现无锁队列。。。参...

  • iOS - 基础

    iOS 属性修饰关键字都有哪些? atomic 原子性访问,对属性赋值的时候加锁 noatomic 非原子...

  • iOS中属性关键词

    1.原子性与非原子性 atomic:原子性,只有一个线程可以同时访问实例。atomic 是线程安全的(因为会为se...

  • JUC下的atomic包

    AtomicInteger类提供了原子性的访问和更新,而它的原子性实现原理则是基于CAS(compare and ...

网友评论

      本文标题:原子访问

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