多线程之虚假唤醒
首先介绍几个函数,是多线程中关于条件变量的:
pthread_cond_wait
int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);
//成功,返回0; 失败,返回错误编号
该函数的主要作用是,将线程放置等待线程队列上,然后阻塞,等待条件发生唤醒线程。其执行步骤如下:
- 利用 mutex 对 cond 加锁(在函数外部调用);
- 进入函数;
- 将该线程放至条件等待线程队列上;
- 利用 mutex 对 cond 解锁;
- 阻塞(等待);
- 被唤醒,函数返回时,利用 mutex 对 cond 进行加锁。
pthread_cond_signal
及pthread_cond_broadcast
int pthread_cond_signal(pthread_cond_t* cond);
int pthread_cond_broadcast(pthread_cond_t* cond);