9

私は 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 が終了する前に終了する必要があります...

私はそれを明確に理解しているかどうかはわかりません。誰かがこれで私を助けてくれますか? ありがとうございました!

4

1 に答える 1