要进行循环澄清

问题描述 投票:0回答:1

根据https://golang.org/pkg/sync/#Cond.Wait,必须将Wait()调用包装在for循环中,因为在第一次恢复时,c.L据称未锁定。这与“ ...,等待锁定c.L,然后返回之前”上面的句子相矛盾。

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

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

go condition-variable
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.