mirror of https://github.com/v2ray/v2ray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
640 B
26 lines
640 B
package signal |
|
|
|
// Notifier is a utility for notifying changes. The change producer may notify changes multiple time, and the consumer may get notified asynchronously. |
|
type Notifier struct { |
|
c chan struct{} |
|
} |
|
|
|
// NewNotifier creates a new Notifier. |
|
func NewNotifier() *Notifier { |
|
return &Notifier{ |
|
c: make(chan struct{}, 1), |
|
} |
|
} |
|
|
|
// Signal signals a change, usually by producer. This method never blocks. |
|
func (n *Notifier) Signal() { |
|
select { |
|
case n.c <- struct{}{}: |
|
default: |
|
} |
|
} |
|
|
|
// Wait returns a channel for waiting for changes. The returned channel never gets closed. |
|
func (n *Notifier) Wait() <-chan struct{} { |
|
return n.c |
|
}
|
|
|