pthread_condition的虚假唤醒问题

假如有A,B两个消费者线程,他们都阻塞在条件变量上,当生产者生产一个资源后,两个都被唤醒,A抢到了锁,当A消费资源后释放锁后,B又拿到了锁,消费不存在的资源,所以出现了虚假唤醒问题
那么我有一个疑问,在条件变量上,B不会因为竞争锁失败继续沉睡吗,还是说尽管竞争锁失败,但还是被唤醒的状态,所以得到锁后又继续执行后续代码了,因此换成while能让B检测到条件不满足,重新阻塞沉睡在锁上
其实归根结底是阻塞在条件变量函数上竞争锁失败后是不是继续沉睡,但是看了好多pthread_condition函数,都没提到阻塞在条件变量上竞争失败的线程是一个什么状态

img

在条件变量上阻塞的线程在竞争锁失败后会重新进入阻塞状态,等待下一次被唤醒。当条件变量上的线程被唤醒时,它们并没有被保证立即获得锁,而是需要重新竞争锁。如果竞争锁失败,则会释放锁并重新进入阻塞状态,等待下一次被唤醒。因此,在使用条件变量时,需要使用while循环来检查条件是否满足,以避免虚假唤醒问题。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^