美文网首页
使用管道实现WaitGroup同步功能

使用管道实现WaitGroup同步功能

作者: funcx | 来源:发表于2019-04-21 12:55 被阅读0次
package main

import (
    "log"
)

func main() {
    wg := NewWG()
    for i := 0; i < 5; i++ {
        wg.Acc()
        go func(n int) {
            log.Println(n)
            wg.Done()
        }(i)
    }
    wg.Wait()
    log.Println("end")
}

// 使用chan写一个类型实现sync.WaitGroup{}功能,并测试
type wg struct {
    ch    chan struct{}
    count int
}

func NewWG() *wg {
    return &wg{ch: make(chan struct{})}
}

func (w *wg) Acc() {
    w.count++
}

func (w *wg) Done() {
    w.ch <- struct{}{}
}

func (w *wg) Wait() {
    for i := 0; i < w.count; i++ {
        <-w.ch
    }
}

相关文章

网友评论

      本文标题:使用管道实现WaitGroup同步功能

      本文链接:https://www.haomeiwen.com/subject/myndgqtx.html