在编程中,原子动作是一个突然有效地发生。一个原子动作在中途是不能停止的:要不完全执行完,要不一点也不执行。直到原子操作完全执行,它的副作用才会可见。
我们已经看见了自增长表达式,比如c++,不描述一个原子操作。甚至非常简单的表达式可以定义复杂的动作,可以分解为其他的动作。可是,有些动作你可以指定为原子的:
1 引用变量和大多数基本数据类型(除了long和double)的读写是原子的
2 所有声明为volatile字段的变量读写是原子的(包括long和double)
原子动作不能交叉,这样它们就不必担心使用时遇到线程争用了。可是,这不能完全消除同步原子动作,因为内存一致性错误仍然存在。使用volatile变量减少了这方面的风险。因为一个写volatile变量和随后的变量读建立了一个happens-before关系。这就意味着一个volatile变量的变化对其他线程是可见的。更多的,当线程读volatile变量时,它看见的不仅是volatile的最近的变化,还有导致变化的代码的副作用。
虽然使用简单的原子变量访问比通过Synchronized代码访问更加高效,但是需要程序员更多关注避免内存一致性错误。额外的努力是否值得取决于应用程序的规模和复杂性。
java.util.Concurrent包中一些类提供了不依赖Synchronization的原子方法。我们将在高等级并发中讨论。
分享到:
相关推荐
详细地介绍了C++11中的原子操作,值得好好研读。
atomic_ops原子操作1
今天小编就为大家分享一篇关于C++11并发编程关于原子操作atomic的代码示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
很好用的原子钟同步软件,服务器出现时钟同步异常可以使用该软件
来自BOOST库的原子操作atomic的源代码,跨平台
原子 用于强制原子访问的原始类型的简单包装器。安装$ go get -u go.uber.org/atomic@v1旧版导入路径从 v1.5.0 开始,导入路径go.uber.org/atomic是唯一支持的使用这个包的方式。 如果您使用的是 Go 模块,则此包将...
angular-atomic-notify, angular.js 应用程序的原子咆哮通知 angular-atomic-notify一个用于显示通知的AngularJS模块 依赖项我们使用这个库作为示例,注意jQuery用于 angular.element 和 Font Awesome 图标,但是你...
原子范数约束谱估计文章,是稀疏恢复领域比较好的文章
Chronograph Atomic Time Clock 6.40(校时原子钟的时间工具)英文绿色特别版
atomic
Atom-atomic-bohr-model.zip,D3驱动的可定制动画原子玻尔模型原子玻尔模型,atom是一个用web技术构建的开源文本编辑器。
3、并发编程之CAS&Atomic原子操作详解
Atomic
fs-write-stream-atomic - 类似`fs.createWriteStream(...)`, 但是是原子的
Atom-atomic-rtags.zip,原子的rtag原子标记,atom是一个用web技术构建的开源文本编辑器。
原子设计引导更改 Bootstrap 以获得更好的效果! 使用原子设计方法:)
主要介绍了Java多线程Atomic包操作原子变量与原子类详解,简单介绍了Atomic,同时涉及java.util.concurrent中的原子变量,Atomic类的作用等相关内容,具有一定参考价值,需要的朋友可以了解下。
java.util.concurrent.atomic包:原子类的小工具包,支持在单个变量上解除锁的线程安全编程 原子变量类相当于一种泛化的 volatile 变量,能够支持原子的和有条件的读-改-写操作。AtomicInteger 表示一个int类型的值...
原子跨链交易此仓库包含一些实用程序,可在erc20货币之间手动执行跨链原子交换。 当前支持Qtum,以太坊及其基于erc20的令牌。什么是原子交换原子交换或原子跨链交易是一种加密货币与另一种加密货币的交换,而无需...