第十章第六节 条件变量
文章目录
条件变量用于在线程之间同步共享数据的值。条件变量提供一种线程间的通知机制:当某个共享数据达到某个值时,唤醒等待这个共享数据的线程。
下面介绍5个主要的函数。
1 | /* |
pthread_cond_init函数用于初始化条件变量;此外,还可以使用如下方式来初始化一个条件变量。
1 | pthread_cond_t cond=PTHREAD_COND_INITIALIZER; |
宏PTHREAD_COND_INITIALIZER实际上就是将条件变量的各个字段均置0。
1 | /* |
pthread_cond_destroy函数用于销毁条件变量,以释放其占用的内核资源;销毁一个正在被等待的条件变量将失败并返回EBUSY。
1 | /* |
pthread_cond_broadcast函数以广播的方式唤醒所有等待目标条件变量的线程。
1 | /* |
pthread_cond_signal函数用于唤醒一个等待目标条件变量的线程。至于唤醒哪个线程,取决于线程的优先级与调度策略。
如果想要唤醒特定线程,可使用如下方法:定义一个能唯一表示目标线程的全局变量,在唤醒等待条件变量的线程前先设置该变量为目标线程,再采用广播方式唤醒所有等待条件变量的线程,这些线程被唤醒后都检查该变量以判断被唤醒的是否是自己,如果是就开始执行后续代码,否则返回继续等待。
1 | /* |
pthread_cond_wait函数用于等待目标条件变量。在调用pthread_cond_wait之前,必须确保互斥锁mutex已经加锁;pthread_cond_wait执行时,先将调用线程放入条件变量的等待队列中,再将互斥锁mutex解锁。
pthread_cond_wait函数成功返回时mutex将再次上锁。