与互斥量不同,条件变量的作用并不是保证在同一时刻仅有一个线程访问某一个共享数据,而是在对应的共享数据的状态发生变化时,通知其他因此而被阻塞的线程。条件变量总是与互斥量组合使用。互斥量为共享数据的访问提供互斥支持,而条件变量可以就共享数据的状态的变化向相关线程发出通知。 下面给出主要的几个函数:

    1. func NewCond(l Locker) *Cond:用于创建条件,根据实际情况传入sync.Mutex或者sync.RWMutex的指针,一定要是指针,否则会发生复制导致锁的失效
    2. func (c *Cond) Broadcast():唤醒条件上的所有goroutine
    3. func (c *Cond) Signal():随机唤醒等待队列上的goroutine,随机的方式效率更高
    4. func (c *Cond) Wait():挂起goroutine的操作