栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在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);        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403267.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号