有没有人可以解释这段代码呢?????

xmge · · 806 次点击
``` 1. mian主线程建立两个goroutine扔给系统去执行,主程执行到 time.Sleep(time.Second * 2)等待2秒钟。如果不等待,不管两个goroutine有没有执行,主线程都会结束程序退出。 2. flag := <-c从通道c中取值,如果通道是空的则阻塞该线程,此处已向通道送值c <- false。但是你的两个goroutine在并发,你的if flag := <- c;不能确定先后顺序,一个goroutine的通道取出值,则另一个goroutine的通道阻塞。 ```
#5
更多评论
xmge
欲戴王冠 必承其重
##### 代码并行执行时,执行顺序不定,以下代码输出无规律 ```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
两种可能 如果先执行27行,则输出:a, 1, b, 2, c, 3, d, 4 如果先执行18行,则什么都不输出
#2