1. 锁的缺点
- 互斥锁、读写锁等底层都是CAS,需要访问内存。
- 另外在大部分非x86架构上获取锁使用了内存栅(Memory Barrier),这会导致处理器流水线停滞或刷新。
- 禁止指令重排序、优化、并行
- 影响cache
2. RCU
RCU(Read-Copy Update),顾名思义就是读-拷贝修改(写时复制),它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改。
读者几乎没有什么同步开销,它不需要锁,不使用原子指令,而且在除alpha的所有架构上也不需要内存栅(Memory Barrier),因此不会导致锁竞争,内存延迟以及流水线停滞。不需要锁也使得使用更容易,因为死锁问题就不需要考虑了。写者的同步开销比较大,它需要延迟数据结构的释放,复制被修改的数据结构,它也必须使用某种锁机制同步并行的其它写者的修改操作。
java中写时复制技术的使用:
CopyOnWriteArrayList
CopyOnWriteArraySet
网友评论