关于go协程使用chan的疑惑

xiaogan18 · · 1165 次点击
并行天然就是乱序的,想顺序必须同步,同步包(sync)了解一下。
#6
更多评论
每个goroutine的执行顺序是不确定的,并不是谁先启动就谁先执行,我在https://play.golang.org/上运行的结果还是这样的呢:1ab23cd45ef67gh89i
#1
```go package main import ( "fmt" "sync" ) const ( nums = "123456789" letters = "abcdefghi" ) func main() { ch1 := make(chan int) ch2 := make(chan int) wd := sync.WaitGroup{} wd.Add(len(nums) + len(letters)) fun1 := func() { for _, v := range nums { <-ch2 fmt.Print(string(v)) wd.Done() ch1 <- 1 } } fun2 := func() { for _, v := range letters { <-ch1 fmt.Print(string(v)) wd.Done() ch2 <- 1 } } go fun1() go fun2() ch2 <- 1 wd.Wait() } ```
#2