gpt4 book ai didi

go - 等待 sync.Cond 超时

转载 作者:IT王子 更新时间:2023-10-29 01:27:37 41 4
gpt4 key购买 nike

有没有可能用一些简单的方法来做 Java 的等价物

wait(long timeMillis)

它在监视器(mutex+cond,大致)上等待指定的时间,如果没有收到信号则返回?

我在文档中找不到任何东西或谷歌搜索,虽然当然可以通过制作 WaitGroup 和计时器 goroutine pop 来玩一些游戏,但这看起来很乏味/烦人/效率低下简单的功能(顺便说一句,我遇到过的任何底层系统线程库都直接支持它)

编辑:是的,我们都读过http://www.golang-book.com/10/index.htm以及https://blog.golang.org/pipelines - 同样,创建更多线程是一个“坏”(非性能)解决方案,而且 channel 也不太适合这个。想象一个典型的并发服务器 Join() 方法的用例......(请不​​要告诉我反转控制并改用 Listener 模式。您并不总是有机会更改正在使用的 API。 ..)

最佳答案

您可以使用 channel 实现仅支持广播(无信号)的条件变量。这是它的一个快速要点: https://gist.github.com/zviadm/c234426882bfc8acba88f3503edaaa36#file-cond2-go

您也可以在代码中利用这种替换 channel 并关闭旧 channel 的技术。 Gist 中的代码使用 unsafe.Pointer 和原子操作来允许在不获取主 sync.Locker 的情况下调用“广播”。然而,在您自己的代码中,通常情况下,您无论如何都应该从获取锁内广播,这样您就不需要做任何不安全/原子的事情。

虽然此方法有效,但您可能还想 checkout :https://godoc.org/golang.org/x/sync/semaphore .如果你制作一个限制为 1 的加权信号量,那也将为你提供所需的所有能力,这也是公平的。

关于go - 等待 sync.Cond 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29923666/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com