互斥锁和条件变量(pthread)相关函数

Posted lnlin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了互斥锁和条件变量(pthread)相关函数相关的知识,希望对你有一定的参考价值。

互斥锁

#include <pthread.h>

// 若成功返回0,出错返回正的Exxx值
// mptr通常被初始化为PTHREAD_MUTEX_INITIALIZER
int pthread_mutex_lock(pthread_mutex_t *mptr);

int pthread_mutex_trylock(pthread_mutex_t *mptr);   // pthread_mutex_lock 函数的非阻塞模式

int pthread_mutex_unlock(pthread_mutex_t *mptr);

条件变量:

#include <pthread.h>

// 以下两个函数使用条件变量
// 若成功返回0,出错返回正的Exxx值
// cptr通常被初始化为PTHREAD_COND_INITIALIZE
int pthread_cond_signal(pthread_cond_t *cptr);  // cptr指条件变量的类型

int pthread_cond_wait(pthread_cond_t *cptr, pthread_munex_t *mptr);
pthread_cond_wait必须放在pthread_mutex_lockpthread_mutex_unlock之间,因为他要
根据共享变量的状态来觉得是否要等待,而为了不永远等待下去所以必须要在lock/unlock
队中
pthread_cond_signal通常唤醒等在相应条件变量上的单个进程
#include <pthread.h>

// 若成功返回0,出错返回正的Exxx值
int pthread_cond_broadcast(pthread_cond_t *cptr);  // 唤醒在相应条件变量上的所有线程

int pthread_cond_timewait(pthread_cond_t *cptr, pthread_munex_t *mptr,  // 允许线程设置一个阻塞时间限制
                          const struct timespec *abstime);     
// abstime指的是绝对时间,而不是一个时间增量
// abstime通常调用gettimeofday获取当前时间,将其复制到timespec结构中,再加上期望的时间限制

互斥锁和条件变量的属性:

#include <pthread.h>

// 使用非默认属性初始化互斥锁和条件变量,摧毁使用非默认属性初始化的互斥锁和条件变量
int pthread_mutex_init(pthread_mutex_t *mptr, const pthread_mutexattr_t *attr);

int pthread_mutex_destory(pthread_mutex_t *mptr);

int pthread_cond_init(pthread_cond_t *cptr, const pthread_condattr_t *attr);

int pthread_cond_destory(pthread_cond_t *cptr);

// 互斥锁的属性(pthread_mutexattr_t) 条件变量属性的数据类型(pthread_condattr_t)
// 属性的初始化和摧毁
// 若成功返回0,出错返回正的Exxx值
int pthread_mutexattr_t_init(pthread_mutexattr_t *attr);

int pthread_mutexattr_t_destory(pthread_mutexattr_t *attr);

int pthread_condattr_t_init(pthread_condattr_t *attr);

int pthread_condattr_t_destory(pthread_condattr_t *attr);

// 获取/设置互斥锁和条件变量的属性
// 若成功返回0,出错返回正的Exxx值
int pthread_mutexattr_t_getpshared(const pthread_mutexattr_t *attr, int *valptr);

int pthread_mutexattr_t_setpshared(pthread_mutexattr_t *attr, int value);

int pthread_condattr_t_getpshared(pthread_condattr_t *attr, int *valptr);

int pthread_condattr_t_setpshared(pthread_condattr_t *attr, int value);
// value的取值(PTHREAD_PROCESS_PRIVATE或PTHREAD_PROCESS_SHARED(进程间共享属性))

 



以上是关于互斥锁和条件变量(pthread)相关函数的主要内容,如果未能解决你的问题,请参考以下文章

为啥 pthread 的条件变量函数需要互斥锁?

UNIX网络编程:互斥锁和条件变量

linux 互斥锁和条件变量

互斥锁自旋锁读写锁和条件变量

Pthread 超时

互斥量和条件变量