【问题标题】:What happens if no threads are waiting and condition signal was sent?如果没有线程在等待并且发送了条件信号会发生什么?
【发布时间】:2012-03-24 18:39:41
【问题描述】:

如果所有线程都忙并且主线程已经发送线程cond信号会发生什么?

线程池中有 1 个主线程和 3 个 pthread。 3 个 pthread 的状态为

    pthread_mutex_lock(&sync_mutex);
    pthread_cond_wait(&sync_cond, &sync_mutex);
    pthread_mutex_unlock(&sync_mutex);

主线程已发送信号唤醒线程处理工作。在这种情况下,如果 3 个线程已经忙并且下一个信号已经到来怎么办?

【问题讨论】:

  • 如果没有人在等待信号,则信号将无效。或者你是什么意思?
  • 我想知道它是否要等到线程可用

标签: c++ pthreads


【解决方案1】:

如果您使用以下功能之一:

pthread_cond_signal - 重新启动在条件变量 cond 上等待的线程之一。 pthread_cond_broadcast - 唤醒所有被指定条件变量阻塞的线程。

说明书上说

pthread_cond_broadcast() 和 pthread_cond_signal() 函数 如果当前没有线程阻塞,则无效 条件。

【讨论】:

    【解决方案2】:

    什么都没有。信号消失。

    【讨论】:

    • 谢谢,那么为了避免这种情况,您有什么建议可以解决这个问题吗?
    • 如果您想记录信号的次数/计数,即使没有任何等待,请使用信号量。信号量有计数,condvars 事件等没有。
    • 信号量.. 我会检查一下谢谢。当线程可用时,使用一个简单的队列来存储事件并从中出列怎么样?
    • @Jae:条件变量表示条件变化。接收线程必须等待条件变量,直到满足条件,这在使用队列时意味着等待队列不为空(请参阅stackoverflow.com/a/5538447/104774)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2021-08-03
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多