首先看下源码注释
var sharedRsc = false
func tCond1() {
var wg sync.WaitGroup
wg.Add(2)
m := sync.Mutex{}
c := sync.NewCond(&m)
go func() {
c.L.Lock()
for sharedRsc == false {
fmt.Println("goroutine1 wait")
c.Wait()
}
//c.Wait()
fmt.Println("goroutine1 ", sharedRsc)
c.L.Unlock()
wg.Done()
}()
go func() {
c.L.Lock()
for sharedRsc == false {
fmt.Println("goroutine2 wait")
c.Wait()
}
fmt.Println("goroutine2", sharedRsc)
c.L.Unlock()
wg.Done()
}()
// 主动延时
time.Sleep(2 * time.Second)
c.L.Lock()
fmt.Println("改变共享资源状态")
sharedRsc = true
c.Broadcast()
fmt.Println("我改好了,你们自己看着办吧")
c.L.Unlock()
wg.Wait()
}
sync.Cond 的作用不是保证在同一时刻,仅有一个进程可以访问某个共享资源(mutex),而是在对应的共享资源的状态发生变化时,通知其他因此而阻塞的线程。
因篇幅问题不能全部显示,请点此查看更多更全内容