协程实现顺序打印123

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

题目来源:

频次:2

答案:engine

package main

import "fmt"

var one = make(chan struct{}, 1)
var two = make(chan struct{}, 1)
var three = make(chan struct{}, 1)
var done = make(chan struct{})

func PrintOne() {
    defer close(one)
    for i := 0; i < 10; i++ {
        <-three
        fmt.Println("1")
        one <- struct{}{}
    }
}
func PrintTwo() {
    defer close(two)
    for i := 0; i < 10; i++ {
        <-one
        fmt.Println("2")
        two <- struct{}{}
    }
}

func PrintThere() {
    defer close(three)
    for i := 0; i < 10; i++ {
        <-two
        fmt.Println("3")
        three <- struct{}{}
    }
    done <- struct{}{}
}

func main() {
    defer close(done)
    three <- struct{}{}
    go PrintOne()
    go PrintTwo()
    go PrintThere()
    <-done
}
本文来自投稿,不代表本站立场,如若转载,请注明出处:
了解中间件吗?有什么好处?
« 上一篇 09-17
Go 高并发的特点
下一篇 » 09-17

发表评论

发表评论