coming
天行健 君子以自强不息
记录我的成长
互斥锁可以用于保护关键代码段,以确保其独占式地访问。
基础API
1 2 3 4 5 6 7
|
int pthread_mutex_init(pthread_mutex_t * mutex, const pthread_mutexattr_t * attr);
|
pthread_mutex_init函数用于初始化互斥锁。此外,还能通过如下方式初始化一个互斥锁。
1
| pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
|
PTHREAD_MUTEX_INITIALIZER事实上将互斥锁的各个字段均初始化为0。
1 2 3 4 5 6
|
int pthread_mutex_destroy(pthread_mutex_t * mutex);
|
pthread_mutex_destroy函数用于销毁互斥锁,以释放其占用的内核资源。销毁一个已经加锁的互斥锁将导致不可预期的后果。
1 2 3 4 5 6
|
int pthread_mutex_lock(pthread_mutex_t * mutex);
|
pthread_mutex_lock函数以原子操作的方式为一个互斥锁加锁。若目标互斥锁已被锁住,则pthread_mutex_lock调用将阻塞,直到该互斥锁的占有者将其解锁。
1 2 3 4 5 6
|
int pthread_mutex_trylock(pthread_mutex_t * mutex);
|
同理,是pthread_mutex_lock函数的非阻塞版本。若目标互斥锁已被锁住,pthread_mutex_trylock将返回错误码EBUSY。
1 2 3 4 5 6
|
int pthread_mutex_unlock(pthread_mutex_t * mutex);
|
pthread_mutex_lock函数以原子操作的方式为一个互斥锁解锁,若此时有其他线程在等待该互斥锁,则这些线程中的某个将获得该互斥锁。
互斥锁属性
pthread_mutexattr_t对象定义了一套完整的互斥锁属性。线程库提供了一系列函数来操作pthread_mutexattr_t对象,以方便应用程序获取和设置互斥锁属性。下面介绍一些重要的函数。
1 2 3 4 5 6
|
int pthread_mutexattr_init(pthread_mutexattr_t * attr);
|
初始化互斥锁属性对象。
1 2 3 4 5 6
|
int pthread_mutexattr_destroy(pthread_mutexattr_t * attr);
|
销毁互斥锁属性对象。
1 2 3 4 5 6 7 8
|
int pthread_mutexattr_getshared(const pthread_mutexattr_t * attr, int * pshared);
int pthread_mutexattr_setshared(pthread_mutexattr_t * attr, int pshared);
|
获取和设置互斥锁的pshared属性。
1 2 3 4 5 6 7 8
|
int pthread_mutexattr_gettype(const pthread_mutexattr_t * attr, int * type);
int pthread_mutexattr_settype(pthread_mutexattr_t * attr, int type);
|
获取和设置互斥锁的type属性。
本文代表个人观点,内容仅供参考。若有不恰当之处,望不吝赐教!