1 回答

TA貢獻1853條經(jīng)驗 獲得超6個贊
對 wg.Wait() 的調(diào)用一直在等待,直到組的計數(shù)器為零,但是沒有正在運行的 goroutines 來遞減計數(shù)器。
通過在從 goroutine 函數(shù)返回之前調(diào)用 wg.Done() 來修復(fù):
func producer(wg *sync.WaitGroup, stream Stream, tweetChan chan *Tweet) {
defer wg.Done()
for {
tweet, err := stream.Next()
if err == ErrEOF {
close(tweetChan)
return
}
tweetChan <- tweet
}
}
func consumer(wg *sync.WaitGroup, tweetChan chan *Tweet) {
defer wg.Done()
for t := range tweetChan {
if t.IsTalkingAboutGo() {
fmt.Println(t.Username, "\ttweets about golang")
} else {
fmt.Println(t.Username, "\tdoes not tweet about golang")
}
}
}
func main() {
start := time.Now()
stream := GetMockStream()
var wg sync.WaitGroup
tweetChan := make(chan *Tweet)
wg.Add(2)
go producer(&wg, stream, tweetChan)
go consumer(&wg, tweetChan)
wg.Wait()
fmt.Printf("Process took %s\n", time.Since(start))
}
- 1 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報