为什么pthread_cond_wait有虚假的唤醒?

引用手册页:

使用条件变量时,始终存在一个布尔谓词,其中涉及与每个条件等待相关联的共享变量,如果线程应该继续执行,则为true。从pthread_cond_timedwait()或pthread_cond_wait()函数可能会引起虚假的唤醒。由于pthread_cond_timedwait()或pthread_cond_wait()的返回并不暗示此谓词的值,因此应在返回时重新评估该谓词。

因此,pthread_cond_wait即使您未发出信号也可以返回。至少乍一看,这似乎很残酷。这就像一个函数,它随机返回错误的值,或者在它真正到达正确的return语句之前随机返回。似乎是一个重大错误。但是他们选择在手册页中记录而不是修复它的事实似乎表明,有一个合理的原因导致pthread_cond_wait最终虚假地醒来。大概,它的工作方式具有内在的本质,使它无济于事。问题是什么。

为什么pthread_cond_wait虚假归还?为什么不能保证仅在正确发出信号后才能唤醒?谁能解释其伪造行为的原因?


Qyouu
浏览 866回答 3
3回答

拉莫斯之舞

pthread_cond_signal中的“通过条件信号进行的多次唤醒”部分提供了pthread_cond_wait和pthread_cond_signal的示例实现,其中涉及虚假的唤醒。
打开App,查看更多内容
随时随地看视频慕课网APP