go - Cond for 循环说明

标签 go condition-variable

根据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返回,不能保证条件仍然成立。一个 Wait调用 Broadcast 时调用唤醒或 Signal发生。当Wait唤醒它会锁定锁,但不能保证在锁定发生之前条件会发生变化。解锁和挂起在入口处是原子的,但唤醒和锁定不是在导出处。

关于go - Cond for 循环说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61330985/

相关文章:

c++ - 如何验证条件变量是否已初始化?

c++ - 有没有办法在 Linux 上用 C++ 原子地刷新二进制信号量?

c#:Monitor.Wait是如何实现的?

go - 将数据库连接存储在全局变量中

go - 如何将 exec() 与输入参数一起使用?

c++ - std::condition_variable::notify_all() 只唤醒我的线程池中的一个线程

c++ - 将两个线程同步到同一个定时器

使用 Istio grpc-web 代理的 CORS 预检上的 golang gRPC 503

oop - 在 Golang 中返回一个结构

mongodb - 使用 mgo Golang 从 MongoDB 子文档数组中解码