导语
为了确保多线程场景下数据安全,使用锁机制一直是一种优秀的解决方案,但是再高并发场景下,对锁的竞争可能成为性能瓶颈。为此,有出现了一种新的解决方案,被称为是非阻塞同步的方案。这种实现方式不需要使用锁,但依然可以保证高并发场景下数据的一致性,这一次就主要来说说这种不通过锁机制来实现数据安全的方案。
无锁机制
理解CAS
基于锁的同步方式,也是一种阻塞的线程同步方式,无论是使用信号量、重入锁还是内部锁,受到核心资源的限制,不同的线程在锁竞争时总是不能避免等待,从而阻塞当前线程。为了避免出现这种问题,非阻塞同步的方式就被提出来。一种最简单的非阻塞同步的实现就是ThreadLocal,每一个线程拥有各自独立的变量副本,因此在并行计算的时候不需要相互等待。
下面介绍的CAS( Compare And Swap) 算法是一个比较常用的无锁并发控制方法,与锁机制实现相比较,无锁算法的设计与实现都复杂的很多,但由于其非阻塞性,它对死锁问题是先天性免疫,并且线程的相互影响也远远比基于锁的方式小。更重要的是,使用无锁的方式完全没有锁竞争带来的系统开销,也没有线程间频繁的上下文交换调度带来的开