golang中的Cond条件变量讲解
var (
c = sync.Cond{L: &sync.Mutex{}} // 条件变量,多个reader等待共享资源ready的场景
maxNum = 15
)
func main(){
for i := 0; i < maxNum; i++{
go func(i int) {
c.L.Lock()
defer c.L.Unlock()
// Wait会释放c.L锁,并挂起调用者的goroutine,之后恢复执行
c.Wait() // Wait会在返回时对c.L加锁
// 除非被Broadcast或Signal唤醒,否则Wait不会返回
fmt.Println("goroutine:", i)
time.Sleep(time.Millisecond * 100)
}(i)
}
c.L.Lock()
maxNum = 16
c.L.Unlock()
c.Broadcast() // 广播,所有等待的goroutine都会执行
//c.Signal() // 单播,从所有等待的goroutine中随机找一个去执行
time.Sleep(time.Second * 2)
}