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{}{}
		}
	}
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM