最佳答案
引用手册页:
当使用条件变量时,总有一个布尔谓词涉及与每个条件相关联的共享变量,如果线程继续运行,则为 true。可能会发生 pthread _ cond _ timedwait ()或 pthread _ cond _ wait ()函数的虚假唤醒。由于 pthread _ cond _ timedwait ()或 pthread _ cond _ wait ()的返回并不意味着任何关于该谓词值的内容,因此应该在这种返回时重新计算谓词。
因此,即使您没有发出信号,pthread_cond_wait
也可以返回。至少乍一看,这似乎相当糟糕。它就像一个函数,随机返回错误的值,或者在实际到达正确的 return 语句之前随机返回。看起来是个大漏洞。但是,他们选择在手册页中记录而不是修复这个问题的事实似乎表明,pthread_cond_wait
最终以虚假的方式醒来是有合理的原因的。可以推测,它的运作方式有其内在的原因,所以这是不可避免的。问题是是什么。
为什么 pthread_cond_wait
虚假地返回?为什么它不能保证它只有在收到正确的信号时才会醒来呢?有人能解释一下这种虚假行为的原因吗?