Go實(shí)現(xiàn)CountDownLatch

go語(yǔ)言用的不熟,沒找到對(duì)應(yīng)Java的CountDownLatch,就自己寫一個(gè)......試了試好像能用(后面發(fā)現(xiàn)waitGroup就能實(shí)現(xiàn))

ps:拿go造輪子真的快樂啊

package main

import (
    "fmt"
    "sync"
    "time"
)

type DownLatch struct {
    wg sync.WaitGroup
}

func instance(count int) DownLatch {
    latch := DownLatch{}
    latch.wg.Add(count)
    return latch
}

func (latch *DownLatch) Down() {
    latch.wg.Done()
}

func (latch *DownLatch) Wait() {
    latch.wg.Wait()
}

func (latch *DownLatch) WaitTime(t time.Duration) {
    waitCh := make(chan struct{})
    go func() {
        latch.wg.Wait()
        close(waitCh)
    }()
    select {
    case <-waitCh:
        return
    case <-time.After(t):
        return
    }
}

func main() {
    latch := instance(3)
    go func() {
        for i := 0; i < 3; i++ {
            time.Sleep(1 * time.Second)
            go func() {
                latch.Down()
                fmt.Println("count down")
            }()
        }
    }()

    latch.WaitTime(4 * time.Second)
    fmt.Println("keep going")

    time.Sleep(3 * time.Second)
    fmt.Println("end")
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容