正确代码:
func clickEvent(con *sync.Cond, fn HandleFun, id int) {
fmt.Println("waiting on broadcast")
fmt.Printf("Lock %d\n", id)
con.L.Lock() //需要现先lock
con.Wait()
fn()
defer con.L.Unlock()
}
如果直接Wait,会报错,死锁
然后看了看源码:
原来Wait函数里面,会先Unlock一次,再去跑runtime通知。
也就是你不Lock一下,进入到Wait函数就会一直锁住。