gomp_barrier_wait_end中futex_wake多等待者场景:是否保证唤醒最少线程?
libgomp中
gomp_barrier_wait_end()的futex_wake()逻辑疑问 我正在梳理gomp_team_start()通过gomp_barrier_wait()调用链进入gomp_barrier_wait_end()时,其中futex_wake()的使用逻辑。
我注意到gomp_barrier_wait_end()里仅调用一次futex_wake(),但此时可能存在多个线程等待该futex变量。根据futex手册的说明:
FUTEX_WAKE(始于Linux 2.6.0)
该操作最多唤醒val个在uaddr地址的futex变量上等待(例如处于FUTEX_WAIT中)的线程。
由于gomp_barrier_wait_end()中的FUTEX_WAKE可能无法唤醒所有等待者,我原本认为需要多次调用该操作,但查看调用栈后未发现处理该情况的循环逻辑。是我误解了futex手册中FUTEX_WAKE的说明,还是libgomp存在其他机制可以保证唤醒所有等待者?
更新
后来意识到之前的问题表述有误,正确的问题应为:FUTEX_WAKE是否能保证唤醒至少一定数量的等待者?
内容的提问来源于stack exchange,提问作者plafratt
相关产品推荐
相关产品推荐

