读写锁,原子操作,自旋锁的实现
互斥锁(mutex lock),一条线程加锁锁住临界区,另一条线程尝试访问该临界区的时候会发生阻塞,并进入休眠状态。
读写锁(readers-writer lock),对于多读少写的情况,性能好于mutex lock。
源码中用到了__sync_synchronize()内存屏障,主要为了解决gcc的一个乱序执行bug(此bug存在于低版本的gcc,高版本已修复)。
锁的实现方式:
-
使用系统的线程锁
如果定义了
USE_PTHREAD_LOCK,使用此方式。 -
使用
pthread.h的锁
自旋锁(spinlock)不断循环并测试锁的状态,这样就一直占着cpu。
2种实现方式:
-
使用系统的线程锁
如果定义了
USE_PTHREAD_LOCK,使用此方式。 -
使用
pthread.h的锁