Documentation ¶
Overview ¶
Package atomics provides types that can be concurrently accessed and modified, without caller code needing to implement locking.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrWaitGroupDraining = errors.New(
"WaitGroup is draining, internal counter can no-longer be incremented",
)
ErrWaitGroupDraining is returned from WaitGroup.Add(), if WaitGroup is in draining state.
Functions ¶
This section is empty.
Types ¶
type Bool ¶
type Bool struct {
// contains filtered or unexported fields
}
Bool is an atomic boolean, no need for locking which makes the code faster and simpler.
This interface is really just to abstract away the 0 or 1 value of an int32 modified using the sync/atomic package. Hopefully the go compiler will inline these methods so they'll be super fast.
func NewBool ¶
NewBool returns an atomics.Bool initialized with value.
Note it is perfectly safe to just declare an atomics.Bool; it defaults to false just like a normal boolean would do.
type Once ¶
type Once struct {
// contains filtered or unexported fields
}
Once is similar to sync.Done except that once.Do() returns true, if this was the first call to once.Do(). Additionally, a methods once.Wait(), once.Done(), and once.IsDone() have been added for anyone waiting for this once.Do() to have been called.
Also once.Do(nil) will not panic, but act similar to once.Do(func(){}).
func (*Once) Do ¶
Do will call f() and return true, the first time once.Do() is called. All following callls to once.Do() will not call f() and return false.
func (*Once) Done ¶ added in v0.1.0
func (o *Once) Done() <-chan struct{}
Done returns a channel that is closed when once.Do(fn) have been called and fn() has returned.
type WaitGroup ¶ added in v0.0.5
type WaitGroup struct {
// contains filtered or unexported fields
}
WaitGroup is similar to sync.WaitGroup, except it can enter a draining state at which point additional calls to Add will fail and returns ErrWaitGroupDraining
func (*WaitGroup) Add ¶ added in v0.0.5
Add will increment internal counter by delta, if not in draining state. If draining, Add(delta) return ErrWaitGroupDraining if delta is positive.
If the internal counter goes negative Add will panic.
func (*WaitGroup) Done ¶ added in v0.0.5
func (wg *WaitGroup) Done()
Done decrements internal counter and unblocks Wait() when it counter reaches zero.
If the internal counter goes negative Done will panic.
func (*WaitGroup) Drain ¶ added in v0.0.5
func (wg *WaitGroup) Drain()
Drain prevents additional increments using Add(delta)
func (*WaitGroup) String ¶ added in v0.1.0
String returns a string representation of the WaitGroup useful for debugging
func (*WaitGroup) Wait ¶ added in v0.0.5
func (wg *WaitGroup) Wait()
Wait blocks until internal counter reaches zero.
func (*WaitGroup) WaitAndDrain ¶ added in v0.0.5
func (wg *WaitGroup) WaitAndDrain()
WaitAndDrain will wait for the internal counter to reach zero and atomically switch to draining mode, so additional Add() calls will fail.