美文网首页
Golang cond.Broadcast示例

Golang cond.Broadcast示例

作者: FredricZhu | 来源:发表于2019-06-08 15:55 被阅读0次
package main

import (
    "fmt"
    "sync"
)

func main() {
    type Button struct {
        Clicked *sync.Cond
    }

    button := Button{Clicked: sync.NewCond(&sync.Mutex{})}

    subscribe := func(c *sync.Cond, fn func()) {
        var goroutineRunning sync.WaitGroup
        goroutineRunning.Add(1)
        go func() {
            goroutineRunning.Done()
            c.L.Lock()
            defer c.L.Unlock()
            c.Wait()
            fn()
        }()
        goroutineRunning.Wait()
    }

    var clickRegistered sync.WaitGroup
    clickRegistered.Add(3)

    subscribe(button.Clicked, func() {
        fmt.Println("Maximium Window")
        clickRegistered.Done()
    })

    subscribe(button.Clicked, func() {
        fmt.Println("Displaying Annoying dialog box")
        clickRegistered.Done()
    })

    subscribe(button.Clicked, func() {
        fmt.Println("Mouse Clicked")
        clickRegistered.Done()
    })

    button.Clicked.Broadcast()

    clickRegistered.Wait()

}

程序输出如下,


image.png

相关文章

网友评论

      本文标题:Golang cond.Broadcast示例

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