我正在使用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电子书,我没有完全理解他们的解释。
答案 0 :(得分:2)
每次执行程序时,输出都会有所不同。 go例程的执行顺序无法保证。因此,您的输出不是确定性的。