Barrier


  1. #gcc提供的内存屏障,会同时限制编译器和cpu对指令乱序优化
  2. __sync_synchronize()
  3. #只限制编译器不乱序优化
  4. #define barrier() __asm __volatile_("": : :"memory")
  5. #只限制编译器不优化某次的内存访问
  6. #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))

原子指令


  1. #gcc编译器提供的原子指令
  2. __sync_fetch_and_add(int *ptr, int num);
  3. __sync_fetch_add_sub(int *ptr, int num);
  4. ...


  1. #glibc提供的pthread库
  2. int pthread_mutex_lock(pthread_mutex_t *m);
  3. int pthread_mutex_unlock(pthread_mutex_t *m);

对比


image.png

(注:Ratio对应始终周期)

  • Best-case CAS:能命中高速缓存的CAS
  • Best-case lock:能命中高速缓存的lock(需要lock/unlock,对应两个原子操作)
  • CAS cache miss:未命中高速缓存的CAS
  • Comms Fabric:I/O操作的延时
  • Global Comms:电池波绕地球一周的延时