Go Threads - 暂停执行

时间:2011-12-05 02:16:36

标签: go

我有两个执行线程,比如

Routine 1 {
// do something
}
Routine 2 {
// do something
}

是否可以暂停从例程1执行例程2几秒钟,怎么可能?

2 个答案:

答案 0 :(得分:6)

无法控制另一个goroutine的执行。 Goroutines是合作的。他们不互相支配。

你可以做的是在例程2中加入点,检查是否允许继续进行。如

// do stuff
select {
case <-wait:
    <-resume
default:
}

然后例程1可以告诉例程1可以向例程2发送信号告诉它等待:

wait <- true
// whatever stuff goes here
resume <- true

为什么要暂停goroutine?这可能有助于更好地回答您的问题。最好从一个你想要做的地方开始,而不是你想怎么做。这样,你就可以找到如何在语言中实现你真正想要的东西,而不是给你原本想象的实现方法的不良替代品。

答案 1 :(得分:1)

从一个线程中,无法隐式控制另一个线程。你可以这样做,定义一个bool并根据你可以按时间暂停.Sleep(2 * 1e9)。