【问题标题】:does pthread_cond_wait put the thread in wait statepthread_cond_wait 是否将线程置于等待状态
【发布时间】:2012-03-18 13:20:16
【问题描述】:

pthread_cond_wait 是否将调用线程置于等待状态以被 pthread_cond_signal/pthread_cond_broadcast 唤醒,使其不会轮询和搅动 CPU?

另外,sem_wait 是否将线程置于等待状态?如果我理解正确,互斥锁获取/释放方法会使线程在互斥锁上连续轮询,并且不会将线程置于等待状态。

【问题讨论】:

    标签: c unix pthreads


    【解决方案1】:

    是的,pthread_cond_wait,当成功时,会导致线程等待直到收到通知。这就是调用的目的。

    sem_wait 将把线程置于等待状态如果信号量不能递减。在它处于高电平状态时,调用将立即返回。

    在大多数情况下,您不必关心锁是通过忙等待还是调度程序让步来实现的。无论哪种方式,您都可以获得有保证的行为,并且通常库实现者会选择您正在运行的平台上可用的最有效的方法。在某些情况下(您有多个内核并且预期的等待时间很短),这是忙等待。

    【讨论】:

    • 是的,但是了解锁的行为有助于我们编写更好的算法
    【解决方案2】:

    是的,调用 pthread_cond_wait() 的任务将进入等待状态:

       pthread_cond_wait atomically  releases mutex and cause the
       calling thread to block on the condition  variable  cond
    

    在当前的linux内部,它使用futex来做这些事情。

    sem_wait 将阻塞任务,直到有可能 如果信号量当前,则对信号量执行减量 调用时值为零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多