pthread_cond_signal
pthread_cond_signal 函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.如果没有线程处在阻塞等待状态,pthread_cond_signal也会成功返回。
伪代码:
pthread_mutex_t mul;
pthread_cond_t cond;
pthread_mutex_lock(&mul); //加锁
/***
执行对数据的操作
****/
pthread_cond_signal(&cond); //唤醒基于cond条件的其他阻塞线程
pthread_mutex_unlock(&mul); //解锁
使用pthread_cond_signal一般不会有“惊群现象”产生,他最多只给一个线程发信号。假如有多个线程正在阻塞等待着这个条件变量的话,那么是根据各等待线程优先级的高低确定哪个线程接收到信号开始继续执行。如果各线程优先级相同,则根据等待时间的长短来确定哪个线程获得信号。但无论如何一个pthread_cond_signal调用最多发信一次。
pthread_cond_wait
pthread_cond_signal 在多处理器上可能同时唤醒多个线程,当你只能让一个线程处理某个任务时,其它被唤醒的线程就需要继续 wait
伪代码:
pthread_mutex_t mul;
pthread_cond_t cond;
pthread_mutex_lock(&mul); //加锁
while(condition){
pthread_cond_wait(&cond,&mul); //如果condition不满足,才会执行数据操作
}
/***
执行对数据的操作
****/
pthread_mutex_unlock(&mul); //解锁