pthread_cond_wait虚假唤醒

pthread_cond_wait中有多个线程被阻塞时,没死pthread_cond_signal会唤醒一个线程,这个线程会先获取互斥锁之后再执行消费资源的逻辑(比如消息队列)

当wait里面有一个线程被唤醒时可能之后会获取互斥锁失败,因为互斥所肯能被其他未阻塞的线程提前获得. 当此线程获得互斥锁的时候资源可能被消耗了所以pthread_cond_wait外面需要一个while(x < y)这种逻辑包裹着

pthread_mutex_lock(mutex)
while (条件){
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(mutex);


pthread_cond_signal(&cond);

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页