我是 Go 新手,在理解并发和通道时遇到了问题。
package main
import "fmt"
func display(msg string, c chan bool){
fmt.Println("display first message:", msg)
c <- true
}
func sum(c chan bool){
sum := 0
for i:=0; i < 10000000000; i++ {
sum++
}
fmt.Println(sum)
c <- true
}
func main(){
c := make(chan bool)
go display("hello", c)
go sum(c)
<-c
}
程序的输出是:
display first message: hello
10000000000
但我认为应该只有一行:
display first message: hello
所以在 main 函数中,<-c 正在阻塞它并等待另外两个 go rountines 向通道发送数据。一旦 main 函数从 c 接收到数据,它应该继续并退出。
display 和 sum 同时运行并且 sum 需要更长的时间,因此 display 应该将 true 发送到 c 并且程序应该在 sum 完成之前退出......
我不确定我是否清楚地理解它。有人可以帮我解决这个问题吗?谢谢!