为什么在pthread_cond_wait之前需要条件检查

为什么在pthread_cond_wait之前需要条件检查,第1张

为什么在pthread_cond_wait之前需要条件检查

您需要一个while循环,因为

pthread_cond_wait
即使没有达到您等待的条件,被调用的线程也可能会唤醒。这种现象称为“虚假唤醒”。

这不是错误,而是条件变量的实现方式。

也可以在手册页中找到:

可能会发生
pthread_cond_timedwait()或pthread_cond_wait()函数的虚假唤醒。由于从pthread_cond_timedwait()或pthread_cond_wait()返回的值并不暗示此谓词的值,因此
应在返回时重新评估谓词

有关实际代码的更新:

void* proc_add(void *name) {    struct vars *my_data = (struct vars*)name;    printf("In thread Addition and my id = %dn",pthread_self());    while(1) {        pthread_mutex_lock(&mutexattr);        while(!my_data->ipt){  // If no input get in pthread_cond_wait(&mutexaddr_add,&mutexattr);  // Wait till signalled        }        my_data->opt = my_data->a + my_data->b;        my_data->ipt=1;        pthread_cond_signal(&mutexaddr_opt);        pthread_mutex_unlock(&mutexattr);        if(my_data->end) pthread_exit((void *)0);        }    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5012338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存