gpt4 book ai didi

c++ - pthread_cond_broadcast 是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:50 24 4
gpt4 key购买 nike

假设广播线程在只有 3 个线程等待时进行广播,并且在广播线程完成广播后第 4 个线程调用 pthread_cond_wait,第 4 个线程是否会脱离等待状态。以及如何重置条件变量,以便广播线程有时可以重新广播到等待线程。

最佳答案

will the 4th thread ever get out of the waiting condition

不,直到有另一个广播或信号。

And how is the condition variable reset, so that the broadcasting thread can rebroadcast sometimes later to the waiting threads.

最简单的想象是,条件变量所做的一切都在与条件变量关联的互斥锁下同步。所以在你广播的时候,所有等待的东西都(以某​​种方式)进入了一种状态,它试图唤醒并获取互斥量。然后,广播线程释放互斥量。因此,广播时真正“重置”的并不是条件变量,而是从等待条件变量转移到等待互斥量的前三个线程。

为了等待 condvar,您的第 4 个线程必须首先获取互斥锁。这可能发生在前三个线程设法唤醒并获取互斥锁之前或之后,但它显然发生在广播之后,因此您的第 4 个线程未处于“尝试唤醒”状态,处于“等待信号或广播”状态。

实际上它比这更复杂——您实际上不必持有互斥锁来广播条件变量。因此条件变量必须包括一些额外的内部同步(我不知道 linux 上的具体细节),以确保在广播之前等待的所有线程都将其状态更改为单个操作。

不过,通常情况下,您最好持有互斥锁进行广播,因为当您刚刚更改了服务员想要看到的内容时,您就进行了广播,而无论从许多线程中看到的是什么,都使用互斥锁进行了同步.并且您可以通过始终这样做来避免一些尴尬的情况。

关于c++ - pthread_cond_broadcast 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11000331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com