编程go协程交叉顺序打印数组

本文阅读 1 分钟
首页 golang 正文

题目序号:(2744、97、1105...)

题目来源:字节

频次:8

答案:peace

使用channel实现交叉打印0-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{}{}
        }
    }
}
本文来自投稿,不代表本站立场,如若转载,请注明出处:
syncpool的实现原理
« 上一篇 09-17
问了sync.Map(我说我对sync.Pool比较熟,就说Pool了)
下一篇 » 09-17

发表评论

发表评论