为什么关于golang goruntine运行订单的代码是;2“;第一

为什么关于golang goruntine运行订单的代码是;2“;第一,go,goroutine,Go,Goroutine,呃,我不知道为什么“2”要先打印出来 我想检查信息。但是我不知道我应该检查什么信息。所以我把问题贴在那里寻求帮助 我认为第一个goroutine是第一个推入队列。它应该首先打印。您没有将两个启动的goroutine彼此同步,因此无法保证它们以什么顺序运行。唯一需要同步的是主goroutine等待其他2个goroutine完成,但是它们的顺序将是未定义的 下面的示例还使用另一个sync.WaitGroup同步订单: package main import ( "fmt" "syn

呃,我不知道为什么“2”要先打印出来

我想检查信息。但是我不知道我应该检查什么信息。所以我把问题贴在那里寻求帮助


我认为第一个goroutine是第一个推入队列。它应该首先打印。

您没有将两个启动的goroutine彼此同步,因此无法保证它们以什么顺序运行。唯一需要同步的是主goroutine等待其他2个goroutine完成,但是它们的顺序将是未定义的

下面的示例还使用另一个
sync.WaitGroup
同步订单:

package main

import (
    "fmt"
    "sync"
)

func main() {
    runtime.GOMAXPROCS(1)
    w := &sync.WaitGroup{}
    w.Add(2)
    go func() {
        fmt.Println("1")
        w.Done()
    }()
    go func() {
        fmt.Println("2")
        w.Done()
    }()
    w.Wait()
}
输出将是(在上尝试):

基本上,第二个goroutine等待
w2
,完成后在第一个goroutine中调用

请注意,由于第二个goroutine等待第一个goroutine,因此主goroutine只等待第二个goroutine就足够了(这在传递过程中意味着同时等待两个goroutine)。所以上面的例子可以这样写:

1
2

输出是相同的。请在上尝试此选项。

您没有将两个已启动的goroutine彼此同步,因此无法保证它们的运行顺序。唯一需要同步的是主goroutine等待其他2个goroutine完成,但是它们的顺序将是未定义的

下面的示例还使用另一个
sync.WaitGroup
同步订单:

package main

import (
    "fmt"
    "sync"
)

func main() {
    runtime.GOMAXPROCS(1)
    w := &sync.WaitGroup{}
    w.Add(2)
    go func() {
        fmt.Println("1")
        w.Done()
    }()
    go func() {
        fmt.Println("2")
        w.Done()
    }()
    w.Wait()
}
输出将是(在上尝试):

基本上,第二个goroutine等待
w2
,完成后在第一个goroutine中调用

请注意,由于第二个goroutine等待第一个goroutine,因此主goroutine只等待第二个goroutine就足够了(这在传递过程中意味着同时等待两个goroutine)。所以上面的例子可以这样写:

1
2

输出是相同的。请在上尝试此选项。

您正在引用哪个队列?您正在引用哪个队列?