【问题标题】:Can anyone explain C code of a condition variable's signal being broadcast to all waiting threads using pthread_cond_broadcast()?谁能解释使用 pthread_cond_broadcast() 向所有等待线程广播的条件变量信号的 C 代码?
【发布时间】:2023-04-07 16:34:01
【问题描述】:

谁能解释 C 代码,演示如何使用 pthread_cond_broadcast() 将条件变量的信号广播到所有等待线程?

【问题讨论】:

标签: c


【解决方案1】:

pthread_cond_broadcast() 应该在多个线程可能正在等待条件变量时使用,但其中一些线程可能还没有准备好继续。 pthread_cond_signal() 可能会唤醒其中一个线程; pthread_cond_broadcast() 将他们全部唤醒,这样如果有任何人可以继续,一个人会。

例如,我们可能有一个互斥锁来保护两个变量 xy。一些线程在这种情况下等待:

pthread_mutex_lock(&mutex);
while (x < 10)
    pthread_cond_wait(&cond, &mutex);

而其他人在这种情况下等待:

pthread_mutex_lock(&mutex);
while (x < 10 || y < 5)
    pthread_cond_wait(&cond, &mutex);

如果一个线程将x 增加到 10 以上但留下y 小于 5,那么它应该使用pthread_cond_broadcast(&amp;cond),因为任何等待第二个条件的线程还没有准备好运行,所以我们必须确保至少有一个来自第一个条件的线程被唤醒(如果有任何等待该条件的线程)。

可以使用pthread_cond_broadcast() 的另一种情况是当所有个等待线程可以继续进行时(例如,当一组线程应该停止等待并退出时)。

要记住正确代码的一件事是 pthread_cond_signal() 是一种优化,仅此而已 - 如果您的代码是正确的,那么如果每个 pthread_cond_signal() 都被 pthread_cond_broadcast() 替换,它也应该可以工作(但也许不是一样有效)。

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多