我想学习 pthread_cond_wait 的基础知识。在所有的使用情况中,我看到要么
if(cond is false)
pthread_cond_wait
或者while(cond is false)
pthread_cond_wait
我的问题是,我们只想在条件为false时进行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);
}
}
逻辑是,我要求输入线程在有输入时处理数据并通知输出线程将其打印。
my_data->ipt=1
,因为这可能会导致下一次输出线程发出无效信号。最终,每次都应由于while(1)等待cond_wait。那么即使考虑到虚假唤醒,为什么仍应存在while(!my_data->ipt)
检查呢? - CHIDwhile()
而不是if()
,但它们并不能解释为什么你要使用if()
来代替对pthread_cond_wait()
的无条件调用。 - caf