【发布时间】:2018-06-14 14:25:33
【问题描述】:
我正在使用 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 电子书,我没有完全理解他们的解释。
【问题讨论】:
-
goroutines 的全部意义在于它们是并发的。您在代码中键入它们的顺序不会影响它们的执行顺序。
-
这么多连续投反对票的人....记得SO要求请评论为什么你也投反对票....
标签: go concurrency