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) }