通过 WaitGroup 编排递归快速排序调用



我正在尝试并行运行递归快速排序调用:

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()是否是犹太洁食。

如果它工作正常,那么它是正确的。在代码质量方面,我认为该方法没有任何问题,除了对WaitGroup使用全局变量的轻微担忧。如果它是一个小应用程序,那可能没问题,否则我会使用在quicksort中创建的局部变量并作为参数传递给quicksortRecursive.

最新更新