我正在尝试学习 pthread_cond_wait 的基础知识。在所有用法中,我看到
if(cond is false)
pthread_cond_wait
或者
while(cond is false)
pthread_cond_wait
我的问题是,我们只想 cond_wait 因为条件为假。那我为什么要痛苦地明确放置一个 if/while 循环。我可以理解,在cond_wait
我们直接点击它之前没有任何 if/while 检查,它根本不会返回。条件检查只是为了解决这个目的还是有其他意义。如果它用于解决不必要的条件等待,那么进行条件检查并避免 cond_wait 类似于轮询??我正在像这样使用 cond_wait 。
void* proc_add(void *name){
struct vars *my_data = (struct vars*)name;
printf("In thread Addition and my id = %d\n",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);
}
}
逻辑是,只要输入可用,我就要求输入线程处理数据,并向输出线程发出信号以打印它。