【问题标题】:Cond for-loop clarificationCond for 循环说明
【发布时间】:2020-04-20 19:57:27
【问题描述】:

根据https://golang.org/pkg/sync/#Cond.Wait,必须将 Wait() 调用包装在 for 循环中,因为在第一次恢复时,c.L 据称未锁定。这和上面那句话“...,Wait locks c.L before return”相矛盾。

运行此code 时,即使 Wait() 在没有 for 循环的情况下立即恢复执行,也不会发生运行时错误,并且 Unlock() 应该在未先锁定而解锁时抛出运行时错误。

假设在 Go 中使用 Cond 时不需要 for 循环,因为在使用 Cond 时没有虚假唤醒,这是否正确?

【问题讨论】:

    标签: go condition-variable


    【解决方案1】:

    For 循环是必要的,因为当Wait 返回时,不能保证条件仍然成立。当调用BroadcastSignal 时,会唤醒Wait 调用。当Wait 唤醒时,它会锁定锁,但不能保证在锁定发生之前条件会发生变化。解锁和挂起在入口处是原子的,但唤醒和锁定不是在出口处。

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2017-10-30
      • 2015-10-24
      • 1970-01-01
      • 2020-01-19
      相关资源
      最近更新 更多