简单的笔记,未完待续
一道题:
无锁化编程有哪些常见方法?
- 针对计数器,可以使用原子加
- 只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer)
- RCU(Read-Copy-Update),新旧副本切换机制,对于旧副本可以采用延迟释放的做法
- CAS(Compare-and-Swap),如无锁栈,无锁队列等待
解析:
一、RCU
RCU是Linux 2.6内核系统新的锁机制 RCU(Read-Copy Update)。参考:http://www.ibm.com/developerworks/cn/linux/l-rcu/
众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来越大,而这种锁使用了原子操作指令,它需要原子地访问内存,也就说获得锁