当没有人在等待条件时,pthread_cond_broadcast的性能

如果我调用pthread_cond_broadcast并且没有人在等待条件,那么pthread_cond_broadcast是否会调用上下文切换和/或调用内核?

如果不是的话,我可以依靠它是非常快的(我的意思是说,在当前的过程中只运行一小撮指令然后返回)?

在POSIX中没有保证,但是因为你的问题被标记为linuxnptl ,所以可以给出这个上下文中的答案。

如果条件变量上没有服务器,那么pthread_cond_broadcast()的nptl glibc代码只需要一个低级锁来保护条件变量本身的内部,测试一个值然后解锁低级锁。 低级锁本身使用一个futex,只有当该锁存在争用时才会进入内核。

这意味着,除非条件变量本身上有很多争用(即大量线程在同一条件变量上频繁调用pthread_cond_broadcast() / pthread_cond_signal() ),否则将不会有系统调用到内核,开销只会是几个锁定的指令。

pthread Open Group基本规范指出:

如果在cond上没有当前阻塞的线程,则pthread_cond_broadcast()pthread_cond_signal()函数将不起作用。

要衡量这是否需要“只运行一小撮可靠的指令”,你必须得出一些运行时性能分析工具(例如IBM的Quantify),然后运行它来对付你的代码。