课时77_互斥锁(互斥量)相关的函数
1、创建互斥锁
类似于声明一个变量
pthread_mutex_t mutex;
2、互斥锁初始化
互斥锁初始化函数
int pthread_mutex_init(
pthread_mutex_t *mutex,
const pthread_mutexattr_t *mutexattr);
或者对两个参数增加restrict关键字修饰。
restrict关键字的作用,如果p执行一块内存,s=p,则正常s也可以访问p指向的内存,但是如果对内存增加restrict关键字修饰后,只能使用p访问。
int pthread_mutex_init(
pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict mutexattr);
3、互斥锁加锁
互斥锁加锁函数
int pthread_mutex_lock(pthread_mutex_t *mutex);
如果mutex没有被上锁,当前线程会将这把锁锁上;
如果mutex被锁上,当前线程阻塞。锁被打开后,当前线程解除阻塞。
4、互斥锁尝试加锁
互斥锁尝试加锁函数
int pthread_mutex_trylock(pthread_mutex_t *mutex);
如果mutex没有被上锁,当前线程会将这把锁锁上;
如果mutex被锁上,当前线程不阻塞,返回。
结合函数返回值分析:
if(0==pthread_mutex_trylock(pthread_mutex_t *mutex)) //尝试加锁并且加锁成功
{
//访问共享资源
}
else
{
//例如执行错误处理
//或者等一会,再次尝试加锁
}
5、互斥锁解锁
互斥锁解锁函数
int pthread_mutex_unlock(pthread_mutex_t *mutex);
6、互斥锁释放
互斥锁释放函数
int pthread_mutex_trylock(pthread_mutex_t *mutex);