天机阁

两个协程交替打印0-100

2022-07-27 · 1 min read
Go

使用无缓冲的 channel,使两个协程同步,按照相同的步调执行,但因为要交替打印,所以不能每次同步后都打印,要让该输出的协程输出,不该输出的协程不输出。

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup
var CA chan int

func main() {
	wg = sync.WaitGroup{}
	CA = make(chan int)

	wg.Add(2)

	go A()
	go B()
	wg.Wait()
}

func A() {

	for i := 1; i <= 100; i++ {
		CA <- 1
		if i%2 == 0 {
			fmt.Println(i)
		}
	}
	wg.Done()

}

func B() {

	for i := 1; i <= 100; i++ {
		<-CA
		if i%2 == 1 {
			fmt.Println(i)
		}

	}
	wg.Done()

}