【并发编程十五】无锁数据结构——无锁栈
一、无锁数据结构体的优点和缺点
1、优点
- 最大限度实现并发
在基于锁的容器上,若某个线程还未完成操作,就大有可能阻塞另一线程,使之陷入等待而无法处理;而且,互斥锁的根本意图是杜绝并发功能。在无锁数据结构上,总是存在某个线程能执行下一操作。
- 代码的健壮性
假设数据结构的写操作受锁保护,如果线程在持锁期间终止,那么该数据结构只完成了部分改动,且此后无从修补。但是(五锁数据结构),若某线程操作无锁数据时意外终结,则丢失的数据仅限于它持有的部分,其他数据依然完好,能被别的线程正常处理。
无锁数据结构不含锁,因此不会出现死锁
2、缺点
- 难度大
对线程安全的无锁数据结构执行写操作,难度远远高于对带锁的数据结构体执行写操作。
eg.需留心施加在各项操作上的内存次序约束。
- 活锁
由于无锁数据结构完全不含锁,因此不可能出现