pthread_cond_signal 是否只取消阻塞一个线程?如果不是,它会释放多个线程是什么情况?规范说如下:
pthread_cond_signal() 函数应至少解除阻塞在指定条件变量 cond 上阻塞的线程之一(如果任何线程在 cond 上阻塞)。
pthreads 规范允许在实现中使用“虚假唤醒”。例如,参见规范中的假设实现pthread_cond_signal
和pthread_cond_wait
草图,它只允许这种情况。
虚假唤醒的可能性是为什么总是将某个谓词与条件相关联,并在唤醒时检查该谓词。