我正在尝试并行运行递归quicksort调用:
func quicksort(a []int) {
quicksortRecursive(a)
wg.Wait()
insertionsort(a)
}
func quicksortRecursive(a []int) {
if len(a) > THRESHOLD {
l, r := partition(a)
wg.Add(2)
go func() {
quicksortRecursive(a[:r+1])
wg.Done()
}()
go func() {
go quicksortRecursive(a[l:])
wg.Done()
}()
}
}
go
来电显得过于笨拙。以下是更可读的版本仍然正确吗?
func quicksort(a []int) {
wg.Add(1)
quicksortRecursive(a)
wg.Wait()
insertionsort(a)
}
func quicksortRecursive(a []int) {
if len(a) > THRESHOLD {
l, r := partition(a)
wg.Add(2)
go quicksortRecursive(a[:r+1])
go quicksortRecursive(a[l:])
}
wg.Done()
}
我特别想知道在同一个帖子中调用初始wg.Add(1)
和相应的wg.Done()
是否是犹太洁食。
答案 0 :(得分:2)
如果它正常工作,那么它是正确的。在代码质量方面,除了对WaitGroup
使用全局变量的轻微担忧外,我认为该方法没有任何问题。如果它是一个小应用程序它可能没问题,否则我会使用在quicksort
中创建的局部变量并作为参数传递给quicksortRecursive
。