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