| 123456789101112131415161718192021222324252627282930313233343536 |
- package missinggo
- import "sync"
- type ChanCond struct {
- mu sync.Mutex
- ch chan struct{}
- }
- func (me *ChanCond) Wait() <-chan struct{} {
- me.mu.Lock()
- defer me.mu.Unlock()
- if me.ch == nil {
- me.ch = make(chan struct{})
- }
- return me.ch
- }
- func (me *ChanCond) Signal() {
- me.mu.Lock()
- defer me.mu.Unlock()
- select {
- case me.ch <- struct{}{}:
- default:
- }
- }
- func (me *ChanCond) Broadcast() {
- me.mu.Lock()
- defer me.mu.Unlock()
- if me.ch == nil {
- return
- }
- close(me.ch)
- me.ch = nil
- }
|