Variables pthread_cond_signal()与pthread_cond_wait()不匹配的数目

Variables pthread_cond_signal()与pthread_cond_wait()不匹配的数目,variables,pthreads,conditional-statements,Variables,Pthreads,Conditional Statements,有一个生产者和n个消费者。 生产者将n个作业分配给n个使用者,并调用pthread_cond_wait()n次,以等待使用者完成分配的作业。 消费作业后的每个使用者调用pthread_cond_signal()通知生产者 我的问题是“消费者对pthread_cond_signal()的n次调用会使生产者从pthread_cond_wait()中出来n次吗?或者有没有任何情况下,多个信号合并成一个信号,使得pthread_cond_wait()的出现次数少于n次?如果生产者实际上没有在对pthre

有一个生产者和n个消费者。 生产者将n个作业分配给n个使用者,并调用pthread_cond_wait()n次,以等待使用者完成分配的作业。 消费作业后的每个使用者调用pthread_cond_signal()通知生产者


我的问题是“消费者对pthread_cond_signal()的n次调用会使生产者从pthread_cond_wait()中出来n次吗?或者有没有任何情况下,多个信号合并成一个信号,使得pthread_cond_wait()的出现次数少于n次?

如果生产者实际上没有在对
pthread_cond_wait()的调用中等待()
当使用者线程调用
pthread\u cond\u signal()
时,该信号将“丢失”(即,如果生产者线程稍后转入
pthread\u cond\u wait()
,它将阻塞,直到发送另一个信号)

这就是为什么条件变量必须与其他“布尔谓词”结合使用的原因“在保存与条件变量一起使用的互斥体时,会检查该谓词。该谓词是决定是否等待的线程是否应该等待的实际最后一个字。该谓词是最后一个字的另一个原因是,在
pthread\u cond\u wait()
中阻塞的线程可能会被错误唤醒

从:

使用条件变量时,始终存在一个布尔谓词 涉及与每个等待条件相关联的共享变量 如果线程应继续,则为true。从 可能会出现pthread_cond_timedwait()或pthread_cond_wait()函数。 由于从pthread_cond_timedwait()或pthread_cond_wait()返回 没有暗示这个谓词的任何值 谓词应该在返回时重新计算