【发布时间】:2016-11-11 19:25:57
【问题描述】:
我正在尝试在Exercism 上解决这个问题:
编写一个程序,使用并行计算计算文本中字母的频率。
基本上,我有一个FreqMap 类型:
type FreqMap map[rune]int
还有一个Frequency 函数:
func Frequency(s string) FreqMap {
m := make(FreqMap)
for _, v := range s {
m[v]++
}
return m
}
Exercism 提供了一个使用递归实现并发版本的示例,但我想使用for 循环实现我自己的版本。我想出了以下解决方案,但不起作用:
func ConcurrentFrequency(l []string) FreqMap {
c := make(chan FreqMap)
for i := 0; i < len(l); i++ {
go func(i int) {
c <- Frequency(l[i])
}(i)
}
return <- c
}
这似乎只在 1 次迭代后返回,c 似乎只包含 1 个 goroutine 的结果;如果我添加 sync.WaitGroup,我会得到相同的结果。
你能解释一下我在这里缺少什么吗?
提前感谢您的帮助!
【问题讨论】: