码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-09-25 01:25:09      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:非阻塞   ini   条件   初始   try   sign   roc   conda   阻塞   

互斥锁

#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)相关函数

标签:非阻塞   ini   条件   初始   try   sign   roc   conda   阻塞   

原文地址:https://www.cnblogs.com/lnlin/p/9697231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!