pthread_cond_broadcast唤醒while循环内等待线程的行为咨询
问题解答:pthread_cond_broadcast触发后的线程行为
广播触发后的执行流程
pthread_cond_broadcast(cv)调用会先唤醒所有在cv条件变量上阻塞的T个线程,但这些线程被唤醒后不会立即从pthread_cond_wait返回,必须先竞争获取绑定的互斥锁mutex,只有成功拿到锁的线程才能完成pthread_cond_wait调用返回。- 第一个抢到
mutex的线程返回后,会检查while循环的判断条件a == 1,由于修改a = 0的操作是在持有mutex的前提下完成的,该线程会直接读到a=0的结果,判断不成立直接退出while循环,后续该线程无论执行什么逻辑,最终都会释放mutex。 - 剩下的被唤醒的线程会依次抢到
mutex,每次检查判断条件时a都已经是0,不需要再等待,全部都会正常退出while循环。
结论
所有T个线程最终都会退出while循环,不需要后续再发送任何signal或broadcast。
核心前提是你已经采用了条件变量使用的最佳实践:用while循环做条件判断(天然处理了虚假唤醒问题),且共享变量
a的修改是在持有对应mutex的场景下完成的,所有线程都能看到修改后的正确值。
内容的提问来源于stack exchange,提问作者none
相关产品推荐
相关产品推荐

