24.9.9学习目录
一.条件变量
通常条件变量和互斥锁同时使用;
条件变量是用来阻塞线程,其本身并不是锁,直到达到特定的要求;
(1)条件变量初始化
#include <pthread.h>
int pthread_cond_init(pthread_cond_t *cond,const pthread_condattr_t *attr);
attr:通常位默认值NULL
也可以使用静态初始化pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
(2)释放条件变量
#include <pthread.h>
int pthread_cond_destroy(pthread_cond_t * cond);
(3)等待条件
在使用条件变量时当遇到条件不满足时,会将共享区域上的锁解开,然后阻塞线程等待条件满足,然后重新上锁,这些操作都是调用条件等待函数时完成,并且是原子操作
#include <pthread.h>
//参数为条件变量指针,互斥锁
int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex)
//给与等待的期限
int pthread_cond_timewait(pthread_cond_t *cond,pthread_mutex_t *mutex,const struct *abstime);
(4)唤醒被条件变量阻塞的线程
#include <pthread.h>
//唤醒至少一个阻塞在条件变量上的线程
int pthread_cond_signal(pthread_cond_t *cond);
//唤醒区别被阻塞的线程
int pthread_cond_broadcast(pthread_cond_t *cond);