这个的输出怎么那么奇怪呢?
来源:10-2 go语言的调度器

weibo_隱懓_0
2018-03-01
package main import ( "fmt" "runtime" ) func main() { runtime.GOMAXPROCS(1) //var wg sync.WaitGroup //wg.Add(2) ch_a := make(chan bool) ch_A := make(chan bool) ch_A1 := make(chan bool) fmt.Println("Start") go func() { // defer wg.Done() for count := 0; count < 3; count++ { for char := 'a'; char < 'a'+26; char++ { fmt.Printf("%c", char) } } fmt.Println() ch_a <- true }() go func() { // defer wg.Done() for count := 0; count < 3; count++ { for char := 'A'; char < 'A'+26; char++ { fmt.Printf("%c", char) } } fmt.Println() ch_A <- true }() go func() { // defer wg.Done() for count := 0; count < 3; count++ { for char := 'B'; char < 'A'+26; char++ { fmt.Printf("%c", char) } } fmt.Println() ch_A1 <- true }() fmt.Println("Wait to finish") //wg.Wait() <-ch_a <-ch_A <-ch_A1 fmt.Println("end") }
为什么先打印了最后面的goroutine内容,
不是这些goroutine会放在逻辑处理器的全局队列里等待执行吗。
写回答
1回答
-
ccmouse
2018-03-01
请问您输出了啥,具体哪里奇怪?goroutine并发运行起来结果并不确定的。
总的来说,不是全局队列,而且像线程那样并发执行,所以可能最后的先出来。012018-03-07
相似问题