PTHREAD_SPIN_LOCK - Linux手册页

时间:2019-08-20 18:01:05  来源:igfitidea点击:

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。

备注

将本页描述的任何功能应用于未初始化的自旋锁都会导致未定义的行为。

仔细阅读pthread_spin_init(3)中的NOTES。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/