【问题标题】:pthread_cond_signal and pthread_cond_wait, error checkpthread_cond_signal 和 pthread_cond_wait,错误检查
【发布时间】:2017-05-11 16:11:56
【问题描述】:

我想了解,当 thread_1 多次发送 pthread_cond_signal 到已经收到信号且仍在进行中的 thread_2(等待 pthread_cond_wait)时会发生什么。

  1. thread_1 会阻塞直到信号处理完毕?
  2. OR 信号是否会在 thread_2 被忽略,thread_1 会继续执行

在上述任何一种情况下,我们是否可以得到任何错误消息以便我们可以采取适当的措施(比如在线程1中返回适当的错误)

非常感谢。

【问题讨论】:

    标签: c pthreads


    【解决方案1】:

    我想了解,当 thread_1 发送时会发生什么 pthread_cond_signal 多次发送到 thread_2(等待 pthread_cond_wait) 已经收到信号并且仍在 进展。

    首先你不能这样做。 pthread_cond_signal 对条件变量执行操作;它没有发出任何特定线程的信号。我想您的意思是询问线程调用时会发生什么 pthread_cond_signal,指定当时没有服务员的 CV。

    1. thread_1 会阻塞直到信号处理完毕?
    2. OR 信号是否会在 thread_2 被忽略,thread_1 会继续执行

    后者。 pthread_cond_signal 不应被解释为试图向任何特定线程发送消息。如果有任何消息是内核,或者通过它传递的是 CV。在任何情况下,如果在没有线程等待指定的 CV 时执行这样的调用,则它没有任何效果。它当然不会阻塞调用线程。

    在上述任何一种情况下,我们是否可以得到任何错误消息,以便我们可以 采取适当的措施(例如在线程 1 中返回适当的错误)

    不,因为向没有服务员的 CV 发出信号并不是错误。如果您希望执行某种同步消息交换,那么您可以在互斥锁和 CV 之上执行此操作,但它们本身并不能提供您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2015-08-18
      相关资源
      最近更新 更多