gpt4 book ai didi

go - 如何确定从 channel 接收的顺序?

转载 作者:行者123 更新时间:2023-12-01 22:38:03 26 4
gpt4 key购买 nike

考虑以下来自 the tour of go 的示例.

如何确定 channel 的接收顺序?
为什么 x 总是从 gorouting 获得第一个输出?
这听起来很合理,但我没有找到任何关于它的文档。
我尝试添加一些 sleep ,但仍然 x 从第一次执行的 gorouting 中获取输入。

    c := make(chan int)
go sumSleep(s[:len(s)/2], c)
go sum(s[len(s)/2:], c)
x, y := <-c, <-c // receive from c

fmt.Println(x, y, x+y)

sleep 是 之前 发送到 channel 。

最佳答案

消息总是按照它们发送的顺序被接收。那是确定性的。

然而,跨并发 Goroutine 的任何给定操作的执行顺序是不确定的。因此,如果您有两个 goroutine 同时在一个 channel 上发送,您将无法知道哪个会先发送,哪个会再发送。如果您有两个 goroutine 在同一个 channel 上接收,则相同。

关于go - 如何确定从 channel 接收的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59789047/

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