如果我调用 pthread_cond_broadcast 并且没有人在等待该条件,则 pthread_cond_broadcast 是否会调用上下文切换和/或调用内核?
如果不是,我可以依赖它非常快(我的意思是,只需在当前进程中运行少量汇编指令然后返回)?
最佳答案
POSIX 中没有任何保证,但由于您的问题被标记为 linux 和 nptl,因此可以在该上下文中给出答案。
如果条件变量上没有服务员,则 nptl glibc code for pthread_cond_broadcast()
只是采用低级锁来保护条件变量本身的内部,测试一个值然后解锁低级锁。低级锁本身使用futex,只有在该锁存在争用时才会进入内核。
这意味着除非条件变量本身存在大量争用(即大量线程频繁调用 pthread_cond_broadcast()
/pthread_cond_signal()
相同的条件变量)不会对内核进行系统调用,开销也只是一些锁定指令。
关于linux - 当没有人等待条件时 pthread_cond_broadcast 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18683211/