Go sync.WaitGroup的使用
2023-03-18
Go中的sync.WaitGroup是一种同步机制,用于确保主goroutine等待所有其他goroutines完成后才继续执行,通过Add()、Done()和Wait()方法实现。
Go中的sync.WaitGroup是一种同步机制,用于等待多个goroutine完成它们的工作。通过WaitGroup,我们可以确保一个goroutine等待其他goroutines完成之后再执行。
使用WaitGroup的步骤如下:
- 创建一个WaitGroup对象。
var wg sync.WaitGroup
- 在每个goroutine执行之前,通过Add()方法告诉WaitGroup要等待多少个goroutine完成。
wg.Add(1)
- 在每个goroutine完成时,通过Done()方法告诉WaitGroup一个goroutine已经完成了。
wg.Done()
- 最后,在主goroutine中使用Wait()方法等待所有的goroutine完成。
wg.Wait()
示例代码如下:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
fmt.Println("goroutine ", i, "done")
}()
}
wg.Wait()
fmt.Println("all goroutines done")
}
输出结果:
goroutine 10 done
goroutine 10 done
goroutine 8 done
goroutine 9 done
goroutine 1 done
goroutine 5 done
goroutine 6 done
goroutine 4 done
goroutine 7 done
goroutine 3 done
all goroutines done
通过输出结果可以看出,10个goroutine都在执行,但是它们的执行顺序是不确定的。最后的输出表明所有的goroutine都已完成,main函数会等待所有的goroutine完成后再结束。