文章预览
昨天看到 Jaana Dogan 创建了一个 broadcaster 的库, 话说美女 Jaana Dogan 又回到了 Google 了么。她的实现我们就当做 broadcaster 的第一个实现吧。 什么是 broadcaster?就是村口的大喇叭,一播音,全村都知道了。 Jaana Dogan 实现的这个 broadcaster 只有通知的功能,没有传递消息,也不能重用。我们就以这个库为基准,看看我们能够实现几种方式。 1、sync.Cond 实现 Jaana Dogan 使用 sync.Cond 实现。 package main import ( "sync" ) type Broadcaster struct { mu *sync.Mutex cond *sync.Cond signaled bool } func NewBroadcaster () * Broadcaster { var mu sync.Mutex return { mu: , cond: sync.NewCond( ), signaled: false , } } func (b *Broadcaster) Go (fn func () ) { go func () { b.cond.L.Lock() defer b.cond.L.Unlock() for !b.signaled { b.cond.Wait() } fn() }() } func (b *Broadcaster) Bro
………………………………