是否可以可靠地顺序写入两个单独的通道?

时间:2019-02-11 06:05:59

标签: go channel goroutine

如果我在两个频道上都有选择:

for {
    select {
    case <-chan1:
        // do something
    case <-chan2:
        // do something else
    }
}

然后在一个单独的goroutine中,我依次写到那些通道:

chan1 <- "blah"
chan2 <- true

我保证在执行“其他操作”之前先执行“执行某些操作”吗?

我知道,如果选择具有两个未阻塞的通道,则它是随机选择的,但是我认为,如果该选择已被阻塞,则写入第一个通道可能会可靠地“中断”写入goroutine,这意味着该选择将在未阻塞的情况下运行第一个通道在第二次写入之前。

1 个答案:

答案 0 :(得分:6)

是的,如果通道没有缓冲,则可以依靠它。参见Go Memory Model