PTHREAD_SPIN_LOCK - Linux手册页
Linux程序员手册 第3部分
更新日期: 2017-09-30
名称
pthread_spin_lock,pthread_spin_trylock,pthread_spin_unlock-锁定和解锁旋转锁
语法
#include <pthread.h> int pthread_spin_lock(pthread_spinlock_t *lock); int pthread_spin_trylock(pthread_spinlock_t *lock); int pthread_spin_unlock(pthread_spinlock_t *lock);
编译并链接-pthread。
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
pthread_spin_lock(),pthread_spin_trylock():
- _POSIX_C_SOURCE>= 200112L
说明
pthread_spin_lock()函数锁定lock所指的旋转锁。如果当前未锁定旋转锁,则调用线程将立即获取该锁。如果旋转锁当前被另一个线程锁定,则调用线程旋转,测试该锁直到可用为止,此时调用线程获取该锁。
在调用者已经持有的锁上或未通过pthread_spin_init(3)初始化的锁上调用pthread_spin_lock()会导致未定义的行为。
pthread_spin_trylock()函数与pthread_spin_lock()相似,不同之处在于,如果当前锁定由锁引用的自旋锁,则该调用将立即返回错误EBUSY,而不是旋转。
pthread_spin_unlock()函数可将称为锁的自旋锁解锁。如果有任何线程在该锁上旋转,则这些线程之一将获取该锁。
在调用者未持有的锁上调用pthread_spin_unlock()会导致未定义的行为。
返回值
成功时,这些函数将返回零。失败时,它们返回错误号。
错误说明
pthread_spin_lock()可能因以下错误而失败:
- EDEADLOCK
- 系统检测到死锁情况。
pthread_spin_trylock()失败,出现以下错误:
- EBUSY
- 自旋锁当前被另一个线程锁定。
版本
这些功能首先出现在2.2版的glibc中。
遵循规范
POSIX.1-2001。
另外参见
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。