【发布时间】:2019-01-29 00:34:22
【问题描述】:
有没有可能用一些简单的方法来做相当于 Java 的方法
wait(long timeMillis)
它在监视器上等待(大致是互斥量+cond)一段指定的时间,如果没有发出信号则返回?
我在文档中找不到任何内容或在谷歌上搜索,虽然当然可以通过制作 WaitGroup 和弹出计时器 goroutine 来玩一些游戏,但这似乎很乏味/烦人/效率低下简单的功能(顺便说一下,我遇到过的任何底层系统线程库都直接支持)
编辑:是的,我们都读过http://www.golang-book.com/10/index.htm 和https://blog.golang.org/pipelines - 同样,创建更多线程是解决此问题的“坏”(非性能)解决方案,并且通道也不太适合此问题。想象一下一个典型的并发服务器 Join() 方法的用例......(请不要告诉我反转控件并使用侦听器模式。您并不总是可以更改正在使用的 API。 ..)
【问题讨论】:
-
你在使用 appengine 吗??
-
特别是,在 Tim Cooper 给出的链接上,请注意 Ian Lance Taylor 的评论“条件变量通常不是在 Go 中使用的正确东西”。不要尝试像编写 Java 那样编写 Go。
-
@TimCooper - 有趣,感谢您的链接。但我看到的是“这是处理你的用例的错误方法”和......通道和“side-timers”(goroutine /w timer)都不适用于该线程(或我)中的OP。他们只是关闭了他并关闭了他的票。 =/
-
“它如何应用于我的例子”:你没有给出例子!您在没有任何上下文的情况下要求特定的特性/功能,所以我认为它很可能(基于此处包含“如何在 Go 中执行
?”的问题水平不佳?)上下文本身很可能是在 Go 中以不同的方式更好地完成设计。如果没有任何上下文来说明您为什么觉得需要条件变量,就不可能说得更多。