golang两个协程交替打印出1-100
基于channel实现的,两个协程交替打印出1-100
package main
import (
	"fmt"
	"sync"
)
var (
	toOdd  = make(chan struct{})
	toEven = make(chan struct{})
	wg     = sync.WaitGroup{}
)
func main() {
	wg.Add(2)
	go printOdd()
	go printEven()
	wg.Wait()
	fmt.Println("-----done-----")
}
func printOdd() {
	defer wg.Done()
	for i := 1; i <= 100; i += 2 {
		if i != 1 {
			<-toOdd
		}
		fmt.Println(i)
		toEven <- struct{}{}
	}
}
func printEven() {
	defer wg.Done()
	for i := 2; i <= 100; i += 2 {
		<-toEven
		fmt.Println(i)
		if i != 100 {
			toOdd <- struct{}{}
		}
	}
}

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号