gpt4 book ai didi

go - goroutines 的意外输出

转载 作者:数据小太阳 更新时间:2023-10-29 03:45:49 25 4
gpt4 key购买 nike

我正在使用 Go 并发并具有以下代码:

package main

import (
"fmt"
"runtime"
"sync"
)

func main() {
runtime.GOMAXPROCS(1)
var wg sync.WaitGroup
wg.Add(2)
fmt.Println("Starting Goroutines")
go func() {
defer wg.Done()
for count := 0; count < 3; count++ {
for char := 'a'; char < 'a'+26; char++ {
fmt.Printf("%c", char)
}
}
fmt.Println()
}()
go func() {
defer wg.Done()
for count := 0; count < 3; count++ {
for char := 'A'; char < 'A'+26; char++ {
fmt.Printf("%c", char)
}
}
fmt.Println()
}()
fmt.Println("Waiting to Finish")
wg.Wait()
fmt.Println("Terminating")
}

我的输出是:

Starting Goroutines
Waiting to Finish
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
Terminating

我的问题是我声明第一个 goroutine 显示小写字母,第二个 goroutine 显示大写字母。输出不应该先小写再大写吗?

任何解释都会有所帮助。

注意:此代码来自 Go In Action 电子书,我没有完全理解他们的解释。

最佳答案

每次执行该程序时,您的输出可能会有所不同。不保证 go 例程的执行顺序。因此,您的输出是不确定的。

关于go - goroutines 的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50859806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com