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