两个goroutine, 一个gorotine输出1,3,5,7, 另一个输出2,4,6,8, 怎样有顺序的输出1,2,3,4,5,6,7,8

1,026 阅读1分钟

要用通信去共享内存,channel之前来回通行达到切换goroutine的目的

b1 := make(chan bool)
b2 := make(chan bool)
i := 1
go func() {
	for ; i <= 10; i ++ {
		fmt.Println(i) // 第一步
		<- b2 // 第二步(卡住,第四步后释放)
		b1 <- true // 第六步
	}
}()
go func() {
	for ; i <= 10; i ++ {
		fmt.Println(i) // 第三步
		b2 <- true // 第四步
		<- b1 // 第五步 (卡住,第六步后释放)
	}
}()
time.Sleep(time.Millisecond)