CAS操作

415 阅读2分钟

首先什么是原子操作?

原子操作意为 不可被中断的一个或一系列操作

处理器如何实现原子操作的 ?

  1. 首先处理器会自动·保证基本的内存操作的原子性:处理器保证从系统内存当中读取或者写入一个字节是院子的。意思是当一个处理器读取一个字节时,其它处理器不能访问这个字节的内存地址
  2. 总线锁保证原子性: 出立体提供的一个LOCK#信号,当一个处理器在总线上输出信号时,其它处理器的请求会被阻塞住
  3. 缓存所保证原子性:锁住的总线消耗太大,于是有了缓存锁,在Lock期间处理器缓存的内存会被锁住,其它处理器无法更改内存的叔叔

Java如何实现原子操作?

java使用循环CAS 先说悲观锁和乐观锁

  1. 悲观锁:嘉定会发生兵法冲突,当某个线程获取共享资源时,会组织别的线程获取共享资源。也称独占锁或者互斥锁。例如java中的synchronized同步锁
  2. 乐观锁。假设不会发生并发冲突。只有在最后更新共享资源的时候判断下有没有别的线程修改了这个共享资源。如果发成冲突就重试。直到没有冲突修改成功。CAS就是乐观锁实现方式 乐观锁不会阻塞其它线程。如果发成冲突 采用死循环方式一致重试,直到成功。

CAS,Compare and Swap

CAS思想很简单。三个参数 一个当前内存值V,旧的预期值A,即将更改的B. 当且仅当预期值A和内存值V相同时,将内存值修改为B并返回ture.否则什么都不做,返回false。 JVM中的CAS操作正式利用了提到的处理器提供的CMPXCHG指令实现的。

atomic类 实现了对确认,更改再复制操作的原子性,我们说线程安全,当A线程运行时被挂起。B线程运行后再回到A.