Atomic是指不能分割成若干部分的意思。如果一段代码被认为是 Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中 断,直到其执行完成).
Atomic的原理是:CAS(比较并交换)。现在大多数的处理器都提供对并发 访问的支持,这个支持的反映方式就是提供硬件的指令支持多处理的特殊需求。比如检测或者阻止其它处理器的并发访问来更新共享变量的 指令。对于 Intel x86架构的处理器来说就是通过提供实现CAS或者比较并设置的硬件原语指令集。CAS操作的三个操作数:内存位置(V) ,预期原值(A)和新值(B)。执行的过程通常是:预测内存地址V应该包含值A,如果包含则将值B替换到位置V;否则,不更改任何值,告 知地址V的当前值。CAS对待“读-修改-写”的操作一般是检测这个过程是否有其它的线程在修改变量,如果有那么这次的CAS操作失败, 可以尝试重新进行CAS。讲到这里似乎感觉比 Synchronized还复杂,是否意味着成本不小呢?答案是否。因为它是硬件原生实现的,极为轻 量级的无锁同步方式。就好像高清解码一样,GPU原生硬件解码比软解的CPU占用优势那是相当的不一样啊!
JDK1.5的原子包:java.util.concurrent.atomic
这个包里面提供了一组原子类。其基本的特性就是在多线程环境 下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一 样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。实际上是借助硬件的相关指令来实现的,不会阻塞线程(或者说只是在硬件级别上阻塞了)。其中的类可以分成4组
-
AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference
-
AtomicIntegerArray,AtomicLongArray
-
AtomicLongFieldUpdater,AtomicIntegerFieldUpdater,AtomicReferenceFieldUpdater
-
AtomicMarkableReference,AtomicStampedReference,AtomicReferenceArray
相关推荐
在本文档中,我们将深入探讨Linux系统中实现原子操作(atomic operations)的原理以及在使用原子操作时应该注意的问题。原子操作是一类特殊的操作,它保证了即使在多线程环境下,也能够被当作一个不可分割的整体来...
为了解决这个问题,`fs-write-stream-atomic`库应运而生。它提供了一个类似于`fs.createWriteStream(...)`的接口,但关键的区别在于它的写入操作是原子性的。这意味着整个写入过程要么全部完成,要么完全不进行,不...
在iOS和Mac开发中,Objective-C是主要的编程语言,它在定义实例变量或属性时提供了几个关键的修饰符,包括`volatile`、`nonatomic`和`atomic`。这些关键字对于理解多线程环境下的数据同步和内存管理至关重要。本文将...
《深入理解Boost库:探索原子操作atomic》 在软件开发中,尤其是在多线程和并发编程领域,确保数据的一致性和完整性是至关重要的。Boost库,作为C++的一个强大工具集,提供了各种实用的组件来解决这些问题。其中,`...
在IT行业中,"atomic"这个概念可能涉及到多个领域,但在这里与"字体"标签结合,我们可以推断讨论的是Atomic Design理论在网页设计或用户界面(UI)设计中的应用,特别是与字体相关的原子组件。Atomic Design是一种...
原子操作 atomic_ops 介绍 atomic_ops 是 Linux 内核中的一种原子操作,用于实现原子 counter、Bit 操作和 spinlock 接口。下面将对 atomic_ops 的原子操作进行详细介绍。 atomic_t 类型 atomic_t 是一种原子...
**原子批处理库atomic-batcher** 在前端开发中,我们经常需要执行一系列操作,例如更新DOM、发送网络请求或处理大量数据。这些操作如果逐一执行,可能会导致性能问题,特别是当操作数量大时。为了解决这个问题,...
《ATOMIC:机器常识推理的综合图谱》 在当今的自然语言处理(NLP)领域,理解人类的常识推理是关键挑战之一。"atomic_data.tgz" 是一个专门针对这一问题的数据集,名为 ATOMIC(An Atlas of Machine Commonsense ...
《Atomic Kotlin》是一本专注于介绍Kotlin编程语言基础的书籍,由Bruce Eckel和Svetlana Isakova合作编写。这本书旨在帮助读者快速入门Kotlin,并通过不断迭代和反馈来提升编程技能。该英文版提供了完整的目录,方便...
"Atomic Alarm Clock"是一款功能丰富的时钟工具,它集成了闹钟、日历等多种实用功能,为用户提供了一站式的计时解决方案。这款软件在日常生活中非常实用,不仅可以准确地显示时间,还可以设置个性化的闹钟提醒,确保...
《原子钟同步:Atomic Time Synchronizer 8详解》 在信息技术领域,系统时间的准确性至关重要,无论是服务器集群管理、网络通信还是数据记录,都需要精确的时间同步。Atomic Time Synchronizer 8是一款专为解决此类...
《PyPI官网下载 | atomic-queue-1.0.1.tar.gz:深入理解Python原子队列库》 PyPI(Python Package Index)是Python开发者获取和分享开源软件的重要平台,它为全球Python社区提供了丰富的库资源。在PyPI上,我们可以...
Atom-Atomic-Layout是针对React应用开发的一种声明性响应式布局解决方案。这个库的核心理念是将复杂的布局问题拆解为可复用、可组合的基本单元,就像化学中的原子一样,这些基本单元可以按照需要组合成各种各样的...
Atom-Atomic-Monokai-Syntax.zip,A Monokai-flavored syntax highlighting theme for Atom作为一个长期的优秀文本用户,我已经过渡到使用atom作为我的代码编辑器,虽然我喜欢它更易破解的方面,但我并没有找不到一个...
《原子Scala示例》是基于Scala编程语言的一系列实践代码,源自知名编程书籍《Atomic Scala》。这本书旨在帮助读者深入理解Scala的编程理念和语法特性,通过实例化学习,让初学者和经验丰富的开发者都能从中受益。这...
《Chronograph Atomic Time Clock 6.40:精准时间同步工具详解》 Chronograph Atomic Time Clock 6.40是一款专业的时间同步工具,专为确保计算机时间与国际原子时保持一致而设计。这款软件的独特之处在于其“绿色...
《Atomic Decomposition by Basis Pursuit》一文是关于基追踪算法的原创研究,该算法在信号处理领域,尤其是时间频率分析和时间尺度分析中扮演着至关重要的角色。文章探讨了如何通过最小化系数的l1范数来实现信号的...
Atomic Alarm Clock是 Clock Tray Skins 的同胞软件,具有 Clock Tray Skins 的全部功能,可以替换美化并增强系统自带的任务栏时钟,显示的时间更加仔细,包含月、日、星期、时、分与秒及日历显示、时区等,界面漂亮...
C++11引入了原子操作(Atomic Operations)库,提供了对数据访问的原子性,从而在并发编程中保证了数据的安全性。本篇将深入探讨如何使用C++11的原子特性来实现一个安全的栈。 首先,`atomic`类模板是C++11标准库中...