1234567891011121314151617181920212223242526 |
- package asyncbuffer
- import (
- "sync"
- )
- // Latch is once-releasing semaphore.
- type Latch struct {
- once sync.Once
- done chan struct{}
- }
- // NewLatch creates a new Latch.
- func NewLatch() *Latch {
- return &Latch{done: make(chan struct{})}
- }
- // Release releases the latch, allowing all waiting goroutines to proceed.
- func (g *Latch) Release() {
- g.once.Do(func() { close(g.done) })
- }
- // Wait blocks until the latch is released.
- func (g *Latch) Wait() {
- <-g.done
- }
|