您需要一个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); } }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)