php エディター Apple は、すべてのゴルーチンを実行する実用的な方法である sync.WaitGroup を紹介しています。 Go 言語では、ゴルーチンは複数のタスクを同時に実行できる軽量のスレッドです。ただし、次のステップに進む前に、すべてのゴルーチンが完了するまで待つ必要がある場合があります。このとき、sync.WaitGroup が役に立ちます。これは、すべてのゴルーチンが完了するのを待つためのシンプルかつ効果的な方法を提供し、プログラムの正しい実行順序を保証します。次に、sync.WaitGroupを使ってこの機能を実装する方法を詳しく紹介します。
現在、すべての値をチャネルにプッシュし、そこから読み取って二乗計算しています。
time.sleep(2000 * time.millisecond)
は実行を 2 秒間ブロックするため、使用を避けたいと考えています。代わりに、各 goroutine が処理され、その実行を待機してからプログラムを終了したいと考えています。私は golang から離れたばかりなので、この基本的な質問をしています:(。誰かこの問題の解決を手伝ってくれませんか?
package main import ( "fmt" "sync" "time" ) func doSquare(num int) int { return num * num } var wg sync.WaitGroup func main() { wg.Add(1) st := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} quit := make(chan bool) ch := make(chan int) go func() { for i := range st { ch <- i } }() go func() { for { select { case x := <-ch: fmt.Println(doSquare(x)) // return case <-quit: wg.Done() default: // fmt.Println("---") // do something } } }() quit <- true wg.Wait() time.Sleep(2000 * time.Millisecond) }
qui t を最初のゴルーチンの最後に移動するだけです
これは close(ch)
これ以上データがないことを表す別の言い方
以上がsync.WaitGroup を使用してすべてのゴルーチンを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。