如果我调用pthread_cond_broadcast并且没有人在等待条件,那么pthread_cond_broadcast会调用上下文切换和/或调用内核吗?
如果没有,我可以非常快地依赖它(快速我的意思是,只是在当前进程中运行少量可靠的指令然后返回)?
答案 0 :(得分:2)
POSIX中没有任何保证,但由于您的问题被标记为 linux 和 nptl ,因此可以给出该上下文中的答案。
如果条件变量上没有服务器,那么nptl glibc code for pthread_cond_broadcast()
只需要一个低级锁定来保护条件变量本身的内部,测试一个值然后解锁低级锁定。低级别锁本身使用futex,只有在该锁存在争用时才会进入内核。
这意味着除非条件变量本身存在很多争用(即,在同一个条件变量上经常调用pthread_cond_broadcast()
/ pthread_cond_signal()
的大量线程),否则将没有系统调用内核,开销只会是一些锁定的指令。
答案 1 :(得分:1)
pthread
Open Group Base规范声明:
如果
pthread_cond_broadcast()
上当前没有线程被阻止,pthread_cond_signal()
和cond
函数将无效。
要衡量这是否需要"只是运行少量令人满意的[ sic ]指令"你必须得到一些运行时性能分析工具(例如IBM的Quantify)并根据你的代码运行它。