加锁mutex:若获取不到锁就休眠让出CPU,去尝试获取锁不耗时,等锁比较耗时,共享资源

自旋锁:获取不到锁继续去检测,空等CPU耗时—盲等待,
不适应执行阻塞任务,耗时短

无锁CAS:compare and swap
高并发,队列放入和读取非常频繁,实时性高如高频交易

自旋锁

Posix提供的一组自旋锁(spin lock)的API

  1. #include <pthread.h>
  2. int pthread_spin_init(pthread_spinlock_t *lock int pshared);
  3. int pthread_spin_lock(pthread_spinlock_t *lock);
  4. int pthread_spin_trylock(pthread_spinlock_t *lock);
  5. int pthread_spin_unlock(pthread_spinlock_t *lock);
  6. int pthread_spin_destroy(pthread_spinlock_t *lock);

pthread_spin_lock(3) - Linux manual page
pthread_spin_lock(3): lock spin lock object - Linux man page
pthread_spin_lock - man pages section 3: Basic Library Functions
pshared取值

  • PTHREAD_PROCESS_PRIVATE 在同一进程中的所有线程共享,同一进程指调用pthread_spin_init的线程所属的进程
  • PTHREAD_PROCESS_SHARED 在多个进程中的所有线程共享