golang 的sync.Cond Wait 为什么要先Lock之后才能Wait ?

正确代码:
   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,会报错,死锁
 
然后看了看源码:

Screenshot_2021-11-24_00-08-04.png

 
原来Wait函数里面,会先Unlock一次,再去跑runtime通知。
也就是你不Lock一下,进入到Wait函数就会一直锁住。
 
 

0 个评论

要回复文章请先登录注册