所以我有这个简单的 go 例程代码
func jobX(wg *sync.WaitGroup) {
defer wg.Done()
for i := 0; i < 5; i++ {
fmt.Println("routine X: ", i)
if i == 2 {
time.Sleep(3 * time.Second)
}
}
}
func jobY() {
for i := 0; i < 5; i++ {
fmt.Println("routine Y: ", i)
}
}
func main() {
var wg sync.WaitGroup
fmt.Println("starting go routine...")
wg.Add(1)
go jobX(&wg)
jobY()
fmt.Println("end")
wg.Wait()
}
当我运行程序时,这就是结果:
开始例行公事...
例程 Y:0
例程 Y:1
例程 Y:2
例程 Y:3
例程 Y:4
结束
常规 X:0
常规 X:1
常规 X:2
常规 X:3
常规 X:4
但这正是我所期望的:
开始例行公事...
常规 X:0
常规 X:1
常规 X:2
例程 Y:0
例程 Y:1
例程 Y:2
例程 Y:3
例程 Y:4
常规 X:3
常规 X:4
结束
我不知道我应该如何更改我的代码才能得到这个结果。
您的
waitGroup
需要第二个 Y
,然后您还需要在“结束”之前将 Wait
向上移动:
var wg, wg2 sync.WaitGroup
fmt.Println("starting go routine...")
wg.Add(1)
go jobX(&wg)
wg2.Add(1)
go jobY(&wg2)
wg.Wait()
wg2.Wait()
fmt.Println("end")