条件变量 #include<pthread.h>
特点:读写锁和互斥锁不是任何时候都能阻塞线程,只能保证一个线程访问共享资源。
概念:提供了阻塞线程的一种机制,相当于把不符合条件的线程阻塞在一定的代码区域。尤其记住的是条件变量不能实现线程同步,它不是不是锁,但是可以在线程不满足条件的时候阻塞线程,不让线程继续运行。满足条件时通知线程继续运行。它的最主要作用是阻塞线程,因此还必须使用条件变量+互斥量互斥锁保护一块共享数据。
重点: 条件变量阻塞线程之后会将自已经获取的mutex锁解锁
条件变量解除阻塞的时候会自己去自动获得那个mutex锁
条件变量的类型:pthread_cond_t
条件变量的函数:
1、创建一个条件变量:pthread_cond_t cond;
2、初始化一个条件变量
pthread_cond_init (pthread_cond_t *cond,const pthread_cond_t*restrict attr);
//第一个参数是条件变量地址,第二个是条件变量属性默认为NULL
3、销毁一个条件变量
pthread_cond_destroy(pthread_cond_t *cond);
4、阻塞等待一个条件变量
pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t * mutex);
5、销毁一个条件变量
pthread_cond_destroy(pthread_cond_t *cond);
6、限时等待一个条件变量
pthread_cond_timedwait(pthread_cond_t * cond,//条件变量的地址
pthread_mutex_t* mutex,//互斥量的地址
const structtimespec *abstime);//绝对时间
7、唤醒至少一个阻塞在条件变量上的线程
pthread_cond_signal(pthread_cond_t*cond);
8、唤醒全部阻塞在条件变量上的线程
pthread_cond_broadcast(pthread_cond_t *cond);