Golang go例行运行,但和我想象的不一样

问题描述 投票:0回答:1

所以我有这个简单的 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
结束

我不知道我应该如何更改我的代码才能得到这个结果。

go goroutine
1个回答
0
投票

您的

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")
© www.soinside.com 2019 - 2024. All rights reserved.