golang sync.Cond

package main

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

func main() {
    wait := sync.WaitGroup{}
    locker := new(sync.Mutex)
    cond := sync.NewCond(locker)

    for i := 0; i < 3; i++ {
        go func(i int) {
            defer wait.Done()
            wait.Add(1)
            cond.L.Lock()
            fmt.Println("Waiting start...")
            cond.Wait()
            fmt.Println("Waiting end...")
            cond.L.Unlock()

            fmt.Println("Goroutine run. Number:", i)
        }(i)
    }

    time.Sleep(2e9)
    cond.L.Lock()
    cond.Signal()
    cond.L.Unlock()

    time.Sleep(2e9)
    cond.L.Lock()
    cond.Signal()
    cond.L.Unlock()

    time.Sleep(2e9)
    cond.L.Lock()
    cond.Signal()
    cond.L.Unlock()

    wait.Wait()
}

 

本文来自:博客园

感谢作者:rojas

查看原文:golang sync.Cond

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。