pthread 自旋锁
自旋锁 (Spin Lock) 与互斥量类似,但它并不会使得线程进入阻塞状态,而是在获得自旋锁之前使线程处于忙等状态 (aka, 自旋状态)。那么,自旋锁存在的意义是什么?
A spin lock could be used in situations where locks are held for short periods of times and threads don’t want to incur the cost of being descheduled.
如果线程调度的开销比忙等的开销要大,那么显然让线程进入忙等状态更有助于提高并发度。
API
相关数据结构:
pthread_spinlock_t: 自旋锁数据结构;
init and destory
函数原型:
int pthread_spin_destroy(pthread_spinlock_t *lock);
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
初始化/销毁自旋锁 lock,pshared 的取值及其描述如下:
PTHREAD_PROCESS_SHARED: 进程间共享自旋锁(该锁应当分配在共享内存上)。PTHREAD_PROCESS_PRIVATE: 单个进程内共享。
lock/trylock/unlock
函数原型:
int pthread_spin_lock(pthread_spinlock_t *lock);
int pthread_spin_trylock(pthread_spinlock_t *lock);
int pthread_spin_unlock(pthread_spinlock_t *lock);
作用:
lock申请自旋锁, 在获得锁之前保持自旋状态;trylock如果申请自旋锁失败,立即返回EBUSY错误(表示 Device or resource busy),也就是说,trylock并不能使线程自旋;unlock释放自旋锁。
对已锁定的自旋锁再次调用 lock ,是一种未定义行为(可能返回 EDEADLK 错误)。对未锁定的自旋锁调用 unlock 与之同理。

浙公网安备 33010602011771号