简介
无锁(Lock-Free)编程是解决并发安全问题的另一种思路,与互斥同步(加锁)相对。无锁方案通过 CAS(Compare-And-Swap)硬件指令、不可变对象、ThreadLocal 线程本地存储、Copy-on-Write 等技术手段,在不加锁的前提下保证线程安全,避免了线程阻塞和上下文切换的开销,在高并发场景下能显著提升性能。
并发安全需要保证几个基本特性:
- 可见性 - 是一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,通常被解释为将线程本地状态反映到主内存上,
volatile就是负责保证可见性的。 - 有序性 - 是保证线程内串行语义,避免指令重排等。
- 原子性 - 简单说就是相关操作不会中途被其他线程干扰,一般通过互斥机制(加锁:
sychronized、Lock)实现。
2019/12/25大约 32 分钟