我是 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
所以在主函数中,<-c 正在阻塞它并等待其他两个 go 例程向通道发送数据。一旦主函数从 c 接收到数据,它应该继续并退出。
display 和 sum 同时运行并且 sum 需要更长的时间,因此 display 应该向 c 发送 true 并且程序应该在 sum 完成之前退出...
我不确定我是否理解清楚。有人可以帮我解决这个问题吗?谢谢!
守着星空守着你
相关分类