##### 为什么每次都能够执行成功?(go版本1.11,GOMAXPROCS 默认为CPU最大核数,即代码并行执行)
```golang
package main
import (
"fmt"
"time"
)
func main() {
arra := []int64{1,2,3,4}
arrb := []string{"a","b","c","d"}
c := make(chan bool)
go func(arra []int64) {
for i:=0;i < len(arra);i++ {
if flag := <-c;flag{
fmt.Println(arra[i])
c <- false
}
}
}(arra)
go func(arrb []string) {
for i:=0;i < len(arrb);i++ {
if flag := <- c;!flag{
fmt.Println(arrb[i])
c <- true
}
}
}(arrb)
c <- false
time.Sleep(time.Second * 2)
}
```
```
1. mian主线程建立两个goroutine扔给系统去执行,主程执行到 time.Sleep(time.Second * 2)等待2秒钟。如果不等待,不管两个goroutine有没有执行,主线程都会结束程序退出。
2. flag := <-c从通道c中取值,如果通道是空的则阻塞该线程,此处已向通道送值c <- false。但是你的两个goroutine在并发,你的if flag := <- c;不能确定先后顺序,一个goroutine的通道取出值,则另一个goroutine的通道阻塞。
```
#5
更多评论
##### 代码并行执行时,执行顺序不定,以下代码输出无规律
```go
package main
import (
"fmt"
"time"
)
func main() {
go func() {
fmt.Println(1)
}()
go func() {
fmt.Println(2)
}()
go func() {
fmt.Println(3)
}()
time.Sleep(time.Second * 1)
}
```
#1