【 在 capriccio 的大作中提到: 】
: 学习了一下条件变量,确实适用我的需求。
: 但有个帖子说条件变量存在虚假唤醒和通知丢失的现象,整的我很心虚
:
https://blog.csdn.net/y396397735/article/details/81272752: ...................
用对次序,目前,没发现问题。
生产者:
mutex_unlock之后,
cond_signal()
消费者:
pthread_mutex_lock(&rpool.mut);
while(!(task=rdy_get())) { //从队列中取ready的任务
if(rpool.flg >= tpool.rdy_num) break;
rpool.flg++;
ret=pthread_cond_wait(&rpool.cond,&rpool.mut); //没有任务,等待
rpool.flg--;
}
pthread_mutex_unlock(&rpool.mut);
注意那个while,虚假唤醒就再睡。
--
修改:ylh1969 FROM 221.221.53.*
FROM 221.221.53.*