golang sync.Cond 类

众所周知,go语言在多线程方面的支持是十分完备的。在go语言sync包中提供了一个Cond类,这个类用于goroutine之间进行协作。

这个类并不复杂,只有三个函数,Broadcast() , Signal(), Wait(), 一个成员变量,L Lock

其中Broadcast()实现的功能是唤醒在这个cond上等待的所有的goroutine,而Signal()则只选择一个进行唤醒。Wait()自然是让goroutine在

这个cond上进行等待了。这几个函数有以下几个注意点:

1.Wait()函数在调用时一定要确保已经获取了其成员变量锁L ,因为Wait第一件事就是解锁。 但是需要注意的是,当Wait()结束等待返回之前,

 它会重新对L进行加锁,也就是说,当Wait结束,调用它的Goroutine仍然会获取Lock L。

2.调用Broadcast()函数会导致系统切换到之前在等待的那个Goroutine进行执行。

原文地址:https://www.cnblogs.com/elnino/p/7542922.html