1 回答
TA贡献1853条经验 获得超6个赞
对 wg.Wait() 的调用一直在等待,直到组的计数器为零,但是没有正在运行的 goroutines 来递减计数器。
通过在从 goroutine 函数返回之前调用 wg.Done() 来修复:
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 关注
- 145 浏览
添加回答
举报
