pthread_spin_lock函数用法详解
pthread_spin_lock函数简介
- 头文件包含
#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
pthread_spin_lock函数常见使用错误
- 链接错误
undefined reference to `pthread_spin_lock'
解决办法:添加链接选项
-pthread
- 编译错误
warning: implicit declaration of function ‘pthread_spin_lock’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <pthread.h>
pthread_spin_lock函数详细描述
pthread_spin_lock ()函数锁定lock 引用的自旋锁如果自旋锁当前解锁,调用线程将立即获得该锁。如果旋转锁当前被另一个线程锁定,则调用线程旋转,测试锁直到它可用,此时调用线程获取锁。
对调用方已经持有的锁或尚未用pthread_spin_init (3)初始化的锁调用pthread_spin_lock (),会导致未定义的行为。
pthread_spin_trylock ()函数与pthread_spin_lock ()类似,只是如果lock引用的自旋锁当前被锁定,那么调用将立即返回错误EBUSY ,而不是自旋
pthread_spin_unlock ()函数解锁指向lock 的旋转锁,如果有任何线程在该锁上旋转,那么其中一个线程将获得该锁。
对不由调用方持有的锁调用pthread_spin_unlock ()会导致未定义的行为。
pthread_spin_lock函数返回值
成功后,这些函数返回零。失败时,它们返回一个错误号。
pthread_spin_lock函数错误码
pthread_spin_lock ()可能会失败,出现以下错误:
- EDEADLOCK 系统检测到死锁情况。
pthread_spin_trylock ()失败,出现以下错误:
- EBUSY 旋转锁当前被另一个线程锁定。
pthread_spin_lock函数其他说明
将本页中描述的任何函数应用于未初始化的自旋锁都会导致未定义的行为。
仔细阅读pthread_spin_init (3)中的注释
评论区