Skip to content

Latest commit

 

History

History
54 lines (25 loc) · 1.15 KB

File metadata and controls

54 lines (25 loc) · 1.15 KB

skynet源码分析-锁

读写锁,原子操作,自旋锁的实现

互斥锁

互斥锁(mutex lock),一条线程加锁锁住临界区,另一条线程尝试访问该临界区的时候会发生阻塞,并进入休眠状态。

读写锁

读写锁(readers-writer lock),对于多读少写的情况,性能好于mutex lock。

源码中用到了__sync_synchronize()内存屏障,主要为了解决gcc的一个乱序执行bug(此bug存在于低版本的gcc,高版本已修复)。

锁的实现方式:

  1. 使用系统的线程锁

    如果定义了USE_PTHREAD_LOCK,使用此方式。

  2. 使用pthread.h的锁

自旋锁

自旋锁(spinlock)不断循环并测试锁的状态,这样就一直占着cpu。

2种实现方式:

  1. 使用系统的线程锁

    如果定义了USE_PTHREAD_LOCK,使用此方式。

  2. 使用pthread.h的锁

参考