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