[Go] 多线程交替打印1-100

124 阅读1分钟

[Go] 多线程交替打印1-100

package main

import (
    "fmt"
    "sync"
)

func printNum(wg *sync.WaitGroup, curr, next chan struct{}, start, step int) {
    defer wg.Done()
    for i := start; i <= 100; i += step {
       <-curr
       fmt.Println(i)
       next <- struct{}{}
    }
}

func main() {
    var wg sync.WaitGroup
    wg.Add(2)

    ch1 := make(chan struct{}, 1)
    ch2 := make(chan struct{}, 1)

    go printNum(&wg, ch1, ch2, 1, 2)
    go printNum(&wg, ch2, ch1, 2, 2)

    ch1 <- struct{}{}

    wg.Wait()

    close(ch1)
    close(ch2)
}