原子访问(Atomic Access)

来源:互联网 发布:在code.org学编程 编辑:程序博客网 时间:2024/05/19 03:26

   在编程中,原子操作是指在一次发生中生效。一个原子操作不能在中途停止:它要么完整发生,要么不发生。没有副作用的原子操作是可见的,直到完成。

   我们见过自增表达式了,如c++,并不是原子操作,甚至非常简单的表达式会定义复杂的操作,这些可以被分解为其它的操作。有一些操作可以确认是原子操作,如:

  • 对引用类型变量和大部分基本类型变量(除long和double)的读、写是原子的

  • 所有声明为volatile变量的读和写都是原子的

   原子操作不会被交错,所以不用担心使用他们时发生线程冲突。然而,这并不能消除所有原子操作同步的需求,因为内存一致性错误还是会发生,使用volatile变量可以降低内存一致性错误发生的风险,因为任何对volatile变量写操作都会和后续读操作建立现行发生行为关系。甚至,它还意味着当一个线程读一个volatile变量,它看到的不仅仅是最新的变化,而且看到引发变化代码的负作用。

   使用简单原子变量访问比通过同步代码块访问这些变量更高效,但是需要程序员更加仔细以防止内存一致性错误发生,是否值得花费精力依赖于应用规模和复杂度。

   在java.util.concurrent包中的一些类提供了原子方法,不在依赖同步方法,我们将会在高级并发章节讨论。

0 0
原创粉丝点击