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)
posted @ 2022-04-24 10:55  vx_guanchaoguo0  阅读(44)  评论(0编辑  收藏  举报