Cond for 循环说明
Cond for-loop clarification
根据 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 时没有虚假唤醒?
For 循环是必要的,因为当Wait
returns 时,不能保证条件仍然成立。当调用 Broadcast
或 Signal
时,Wait
调用会唤醒。当 Wait
醒来时,它会锁定锁,但不能保证在锁定发生之前条件会发生变化。解锁和挂起在入口时是原子的,但唤醒和锁定不是在出口时。
根据 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 时没有虚假唤醒?
For 循环是必要的,因为当Wait
returns 时,不能保证条件仍然成立。当调用 Broadcast
或 Signal
时,Wait
调用会唤醒。当 Wait
醒来时,它会锁定锁,但不能保证在锁定发生之前条件会发生变化。解锁和挂起在入口时是原子的,但唤醒和锁定不是在出口时。