私は 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
しかし、私はそれが1行だけであるべきだと思った:
display first message: hello
そのため、メイン関数では <-c がブロックされ、他の 2 つの go ルーチンがチャネルにデータを送信するのを待ちます。メイン関数が c からデータを受け取ると、続行して終了する必要があります。
display と sum が同時に実行され、sum に時間がかかるため、display は c に true を送信し、プログラムは sum が終了する前に終了する必要があります...
私はそれを明確に理解しているかどうかはわかりません。誰かがこれで私を助けてくれますか? ありがとうございました!