线程同步之(条件变量)
1. 相关函数
#include <pthread.h>
//初始化
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);
// 使在条件变量上等待的线程中的一个线程重新开始。如果没有等待的线程,则什么也不做。如果有多个线程在等待该条件,
//只有一个能重启动,但不能指定哪一个。
int pthread_cond_signal(pthread_cond_t *cond);
// 重启动等待该条件变量的所有线程。如果没有等待的线程,则什么也不做。
int pthread_cond_broadcast(pthread_cond_t *cond);
// 自动解锁互斥量(如同执行了 pthread_unlock_mutex),并等待条件变量触发。这时线程挂起,不占用 CPU 时间,直到条件
//变量被触发。在调用 pthread_cond_wait 之前,应用程序必须加锁互斥量。pthread_cond_wait 函数返回前,自动重新对互
//斥量加锁(如同执行了 pthread_lock_mutex)。
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
// 如果在 abstime 指定的时间内 cond 未触发,互斥量 mutex 被重新加锁,且 pthread_cond_timedwait 返回错误 ETIMEDOUT。
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime);
//销毁
int pthread_cond_destroy(pthread_cond_t *cond);
2 解释
条件变量是一种同步机制,必须和互斥量一起使用,它允许线程挂起,直到共享数据上的某些条件得到满足。条件变量上的基本操作有:触发条件(当条件变为 true 时);等待条件,挂起线程直到其他线程触发条件。