等待条件变量的线程能否被等待之前发出的信号唤醒

Can a thread waiting on a condititionable variable be woken up by a signal emitted before he was waiting

等待条件变量 cond 的线程 t 是否有可能被另一个线程 t' 唤醒(其中 t' 实际上可能是 t) 在 t 等待之前发信号?

我已经尝试编写一个 C 程序来执行此操作 1000 次,但它从未发生过,我也阅读了有关 signal and wait 的手册页,但找不到答案。

这是一个在单个线程上可能看起来像的示例

pthread_cond_signal(&cond);
pthread_cond_wait(&cond, &mutex); //Is there a chance that this wait gets cancelled by the signal above

感谢您的帮助!

没有。如果没有其他线程在等待,...signal(&cond) 函数根本不做任何事情。

Can a thread waiting on a conditional variable be woken up by a signal emitted before he was waiting.

不能。但是,它可以被spurious wakeup唤醒,而且不会有什么区别。

等待代码必须等待共享状态发生变化,条件变量wakeup是提示共享状态可能已经发生变化,必须是re-evaluated.