golang-sync.WaitGroup使用例
1662 ワード
golangには2つの方式の同期プログラムがあります.一つはチャンネルを使って、もう一つはロック機構を使っています.チャンネルを使ったケースは私のブログを参考にしてもいいです.golang-chanelを使ってgoroutineを同期させます.ここではロック機構に関連しています.もっと具体的にはsync.WaitGroupです.比較的簡単な同期方法集です.
sync.Wait Groupは3つの方法しかありません.Add()、Dune()、Wait()です.Dune()はAdd(-1)の別名です.簡単には、Add()を使ってカウントを追加し、Dune()はカウントを1つ減らし、カウントは0ではなく、Wait()の運転をブロックします.
ちょっと注意したいのです.sync文書で説明したのは、The main goroutine call Add to set the number of goroutines to wait for.The n each of the goroutines runs and cals Donwhen finished.つまり、main関数を実行するgoroutineでAdd(gone)を実行します.これは雷を踏みました.
一番簡単な例はsync文書の中のexampleです.ここで簡単に例を書きました.
ありがとうございます.
sync.Wait Groupは3つの方法しかありません.Add()、Dune()、Wait()です.Dune()はAdd(-1)の別名です.簡単には、Add()を使ってカウントを追加し、Dune()はカウントを1つ減らし、カウントは0ではなく、Wait()の運転をブロックします.
ちょっと注意したいのです.sync文書で説明したのは、The main goroutine call Add to set the number of goroutines to wait for.The n each of the goroutines runs and cals Donwhen finished.つまり、main関数を実行するgoroutineでAdd(gone)を実行します.これは雷を踏みました.
一番簡単な例はsync文書の中のexampleです.ここで簡単に例を書きました.
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 100; i++ {
wg.Add(1)
}
for i := 0; i < 100; i++ {
go wg.Done()
}
fmt.Println("exit")
wg.Wait()
}
func add(wg sync.WaitGroup) {
wg.Add(1)
}
func done(wg sync.WaitGroup) {
wg.Done()
}
自分のパソコンでgodocを使って搭載したsyncドキュメントに、このカバンを追加する方法はimport「pkg/sync」と明記したbugがあります.一般的なプログラムはimport「sync」です.自分でテストしました.import. 「sync」が正しいです.import「pkg/sync」のコンパイルは全部通ります.皆さんもテストしてもいいです.golang.orgでもう直しました.ありがとうございます.