golang 协程 交替输出
一般面试喜欢考试这个
- 通过无缓冲 chan 类似一个锁 谁拿到谁操作 序列化执行
- 将 核心数限定为1 主动让出调度权
chan
ch := make(chan int)
go func() {
for i := 0; i < 10; i++ {
ch <- 1
if i%2 == 1 {
fmt.Println("A:", i)
}
}
}()
go func() {
for i := 0; i < 10; i++ {
<-ch
if i%2 == 0 {
fmt.Println("B:", i)
}
}
}()
time.Sleep(2 * time.Second)
让出调度
runtime.GOMAXPROCS(1)
go func() {
for i := 0; i < 10; i++ {
if i%2 == 1 {
fmt.Println("A:", i)
}
runtime.Gosched()
}
}()
go func() {
for i := 0; i < 10; i++ {
if i%2 == 0 {
fmt.Println("B:", i)
}
runtime.Gosched()
}
}()
time.Sleep(2 * time.Second)
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/16184842.html