atomics

package
v0.1.20 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 3, 2018 License: MPL-2.0 Imports: 4 Imported by: 1

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

View Source
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

func NewBool(value bool) Bool

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.

func (*Bool) Get

func (b *Bool) Get() bool

Get returns the value of the boolean

func (*Bool) Set

func (b *Bool) Set(value bool)

Set sets the value of the boolean to true or false

func (*Bool) Swap

func (b *Bool) Swap(value bool) bool

Swap sets the value of the boolean to true or false and returns the old value

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

func (o *Once) Do(f func()) bool

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.

func (*Once) IsDone added in v0.1.0

func (o *Once) IsDone() bool

IsDone returns true, if once.Do() have been called, this is non-blocking.

This is just short-hand for non-blocking select on once.Done().

func (*Once) Wait

func (o *Once) Wait()

Wait will block until once.Do() have been called, and this call has returned. After first once.Do() call once.Wait() will always return immediately.

This is just short-hand for <-once.Done().

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

func (wg *WaitGroup) Add(delta int) error

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

func (wg *WaitGroup) String() string

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.

func (*WaitGroup) WaitForLessThan added in v0.1.16

func (wg *WaitGroup) WaitForLessThan(count int)

WaitForLessThan blocks until internal counter reaches less than count.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL