文章目录
  1. 基础API
  2. 互斥锁属性

互斥锁可以用于保护关键代码段,以确保其独占式地访问。

基础API

1
2
3
4
5
6
7
/*
引用方式: #include <pthread.h>
mutex: 指定要操作的互斥锁
attr: 指定互斥锁的属性(默认为NULL)
返回0: 成功 || 返回错误码: 失败
*/
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
/*
引用方式: #include <pthread.h>
mutex: 指定要操作的互斥锁
返回0: 成功 || 返回错误码: 失败
*/
int pthread_mutex_destroy(pthread_mutex_t * mutex);

pthread_mutex_destroy函数用于销毁互斥锁,以释放其占用的内核资源。销毁一个已经加锁的互斥锁将导致不可预期的后果。

1
2
3
4
5
6
/*
引用方式: #include <pthread.h>
mutex: 指定要操作的互斥锁
返回0: 成功 || 返回错误码: 失败
*/
int pthread_mutex_lock(pthread_mutex_t * mutex);

pthread_mutex_lock函数以原子操作的方式为一个互斥锁加锁。若目标互斥锁已被锁住,则pthread_mutex_lock调用将阻塞,直到该互斥锁的占有者将其解锁。

1
2
3
4
5
6
/*
引用方式: #include <pthread.h>
mutex: 指定要操作的互斥锁
返回0: 成功 || 返回错误码: 失败
*/
int pthread_mutex_trylock(pthread_mutex_t * mutex);

同理,是pthread_mutex_lock函数的非阻塞版本。若目标互斥锁已被锁住,pthread_mutex_trylock将返回错误码EBUSY。

1
2
3
4
5
6
/*
引用方式: #include <pthread.h>
mutex: 指定要操作的互斥锁
返回0: 成功 || 返回错误码: 失败
*/
int pthread_mutex_unlock(pthread_mutex_t * mutex);

pthread_mutex_lock函数以原子操作的方式为一个互斥锁解锁,若此时有其他线程在等待该互斥锁,则这些线程中的某个将获得该互斥锁。

互斥锁属性

pthread_mutexattr_t对象定义了一套完整的互斥锁属性。线程库提供了一系列函数来操作pthread_mutexattr_t对象,以方便应用程序获取和设置互斥锁属性。下面介绍一些重要的函数。

1
2
3
4
5
6
/*
引用方式: #include <pthread.h>
attr: 指定的互斥锁属性
返回0: 成功 || 返回错误码: 失败
*/
int pthread_mutexattr_init(pthread_mutexattr_t * attr);

初始化互斥锁属性对象。

1
2
3
4
5
6
/*
引用方式: #include <pthread.h>
attr: 指定的互斥锁属性
返回0: 成功 || 返回错误码: 失败
*/
int pthread_mutexattr_destroy(pthread_mutexattr_t * attr);

销毁互斥锁属性对象。

1
2
3
4
5
6
7
8
/*
引用方式: #include <pthread.h>
attr: 指定的互斥锁属性
返回0: 成功 || 返回错误码: 失败
*/
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
/*
引用方式: #include <pthread.h>
attr: 指定的互斥锁属性
返回0: 成功 || 返回错误码: 失败
*/
int pthread_mutexattr_gettype(const pthread_mutexattr_t * attr, int * type);

int pthread_mutexattr_settype(pthread_mutexattr_t * attr, int type);

获取和设置互斥锁的type属性。