在并发业务中,一般分为有状态的与无状态的服务,其中【有状态】的服务需要处理竞态场景(比如a++这样的操作),主要有两种解决方案

  • 使用互斥锁保证独立性,但是由于需要线程挂起/切换/调度,导致效率较低,因此对它的要求是包裹越小越好,详情看这里的对比与以前写的理论分析。这里典型的实现有Java的synchronized以及其它语言的Mutex
  • 通过busy waiting不断尝试,即while(CAS(old,new)) {};。这里主要有JDK5.0以上的atomic库,以及常见的自旋锁(SpinLock,比如Linux内核/通信设备就有使用),它们底层均通过CAS指令保证原子性,这个是本文将要介绍的内容。