当一个线程调用时pthread_cond_signal()
,Unix网络编程说pthread_cond_signal()
只会有一个线程,因为它不是pthread_cond_broadcast()
.这意味着没有竞争条件.但是,本书没有说明将通知哪个主题,以及如何通知.该函数是否随机唤醒线程?
直接来自男人:
如果在条件变量上阻塞了多个线程,则调度策略应确定线程被解除阻塞的顺序.
"调度策略"是操作系统决定的顺序.这是下面链接中列出的四个中的一个,但你真的不知道(至少没有一些令人印象深刻的hackery)哪一个是"第一".它也无关紧要 - 所有等待条件的线程都应该同样准备好继续 - 否则你就会遇到设计问题.
Linux Kernel中的调度策略对一些Linux策略有一些讨论,如果它很重要,你可以从那里谷歌.