syncx

package
v1.0.11 Latest Latest
Warning

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

Go to latest
Published: Jun 28, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrLimitReturn = errors.New("discarding limited token, resource pool is full, someone returned multiple times")

ErrLimitReturn indicates that the more than borrowed elements were returned

View Source
var ErrTimeout = errors.New("borrow timeout")

ErrTimeout is an error that indicates the borrow timeout

View Source
var ErrUseOfCleaned = errors.New("using a cleaned resource")

ErrUseOfCleaned is an error that indicates using a cleaned resource

Functions

func Guard

func Guard(lock sync.Locker, fn func())

Guard guards the given fn with lock

func Once

func Once(fn func()) func()

Once returns a func that guarantees fn can only called once

Types

type AtomicBool

type AtomicBool uint32

An AtomicBool is an atomic implementation for boolean values

func ForAtomicBool

func ForAtomicBool(val bool) *AtomicBool

ForAtomicBool returns an AtomicBool with given val

func NewAtomicBool

func NewAtomicBool() *AtomicBool

NewAtomicBool returns an AtomicBool

func (*AtomicBool) CompareAndSwap

func (b *AtomicBool) CompareAndSwap(old, val bool) bool

CompareAndSwap compares current value with given old, if equals, set to given val

func (*AtomicBool) Set

func (b *AtomicBool) Set(v bool)

Set sets the value to v

func (*AtomicBool) True

func (b *AtomicBool) True() bool

True returns true if current value is true

type AtomicDuration

type AtomicDuration int64

An AtomicDuration is an implementation of atomic duration

func ForAtomicDuration

func ForAtomicDuration(val time.Duration) *AtomicDuration

ForAtomicDuration returns an AtomicDuration with given value

func NewAtomicDuration

func NewAtomicDuration() *AtomicDuration

NewAtomicDuration returns an AtomicDuration

func (*AtomicDuration) CompareAndSwap

func (d *AtomicDuration) CompareAndSwap(old, val time.Duration) bool

CompareAndSwap compares current value with old, if equals, set the value to val

func (*AtomicDuration) Load

func (d *AtomicDuration) Load() time.Duration

Load loads the current duration

func (*AtomicDuration) Set

func (d *AtomicDuration) Set(val time.Duration)

Set sets the value to val

type AtomicFloat64

type AtomicFloat64 uint64

An AtomicFloat64 is an implementation of atomic float64

func ForAtomicFloat64

func ForAtomicFloat64(val float64) *AtomicFloat64

ForAtomicFloat64 returns an AtomicFloat64 with given val

func NewAtomicFloat64

func NewAtomicFloat64() *AtomicFloat64

NewAtomicFloat64 returns an AtomicFloat64

func (*AtomicFloat64) Add

func (f *AtomicFloat64) Add(val float64) float64

Add adds val to current value

func (*AtomicFloat64) CompareAndSwap

func (f *AtomicFloat64) CompareAndSwap(old, val float64) bool

CompareAndSwap compares current value with old, if equals, set the value to val

func (*AtomicFloat64) Load

func (f *AtomicFloat64) Load() float64

Load loads the current value

func (*AtomicFloat64) Set

func (f *AtomicFloat64) Set(val float64)

Set sets the current value to val

type Barrier

type Barrier struct {
	// contains filtered or unexported fields
}

A Barrier is used to facility the barrier on a resource

func (*Barrier) Guard

func (b *Barrier) Guard(fn func())

Guard guards the given fn on the resource

type Cond

type Cond struct {
	// contains filtered or unexported fields
}

A Cond is used to wait for conditions

func NewCond

func NewCond() *Cond

NewCond returns a Cond

func (*Cond) Signal

func (cond *Cond) Signal()

Signal wakes one goroutine waiting on c, if there is any

func (*Cond) Wait

func (cond *Cond) Wait()

Wait waits for signals

func (*Cond) WaitWithTimeout

func (cond *Cond) WaitWithTimeout(timeout time.Duration) (time.Duration, bool)

WaitWithTimeout wait for signal return remain wait time or timed out

type DoneChan

type DoneChan struct {
	// contains filtered or unexported fields
}

A DoneChan is used as a channel that can be closed multiple times and wait for done

func NewDoneChan

func NewDoneChan() *DoneChan

NewDoneChan returns a DoneChan

func (*DoneChan) Close

func (dc *DoneChan) Close()

Close closes dc, it's safe to close more than once

func (*DoneChan) Done

func (dc *DoneChan) Done() chan lang.PlaceholderType

Done returns a channel that can be notified on dc closed

type ImmutableResource

type ImmutableResource struct {
	// contains filtered or unexported fields
}

An ImmutableResource is used to manage an immutable resource

func NewImmutableResource

func NewImmutableResource(fn func() (any, error), opts ...ImmutableResourceOption) *ImmutableResource

NewImmutableResource returns an ImmutableResource

func (*ImmutableResource) Get

func (ir *ImmutableResource) Get() (any, error)

Get gets the immutable resource, fetches automatically if not loaded

type ImmutableResourceOption

type ImmutableResourceOption func(resource *ImmutableResource)

ImmutableResourceOption defines the method to customize an ImmutableResource

func WithRefreshIntervalOnFailure

func WithRefreshIntervalOnFailure(interval time.Duration) ImmutableResourceOption

WithRefreshIntervalOnFailure sets refresh interval on failure Set interval to 0 to enforce refresh every time if not succeeded, default is time.Second

type Limit

type Limit struct {
	// contains filtered or unexported fields
}

Limit controls the concurrent requests

func NewLimit

func NewLimit(n int) Limit

NewLimit creates a Limit that can borrow n elements from it concurrently

func (Limit) Borrow

func (l Limit) Borrow()

Borrow borrows an element from Limit in blocking mode

func (Limit) Return

func (l Limit) Return() error

Return returns the borrowed resource, returns error only if returned more than borrowed

func (Limit) TryBorrow

func (l Limit) TryBorrow() bool

TryBorrow tries to borrow an element from Limit, in non-blocking mode If success, true returned, false for otherwise

type LockedCalls

type LockedCalls interface {
	Do(key string, fn func() (any, error)) (any, error)
}

LockedCalls makes sure the calls with the same key to be called sequentially For example, A called F, before it's done, B called F, then B's call would not blocked, after A's call finished, B's call got executed The calls with the same key are independent, not sharing the returned values A ------->calls F with key and executes<------->returns B ------------------>calls F with key<--------->executes<---->returns

func NewLockedCalls

func NewLockedCalls() LockedCalls

NewLockedCalls returns a LockedCalls

type ManagedResource

type ManagedResource struct {
	// contains filtered or unexported fields
}

A ManagedResource is used to manage a resource that might be broken and refetched, like a connection

func NewManagedResource

func NewManagedResource(generate func() any, equals func(a, b any) bool) *ManagedResource

NewManagedResource returns a ManagedResource

func (*ManagedResource) MarkBroken

func (mr *ManagedResource) MarkBroken(resource any)

MarkBroken marks the resource broken

func (*ManagedResource) Take

func (mr *ManagedResource) Take() any

Take takes the resource, if not loaded, generates it

type OnceGuard

type OnceGuard struct {
	// contains filtered or unexported fields
}

An OnceGuard is used to make sure a resource can be taken once

func (*OnceGuard) Take

func (og *OnceGuard) Take() bool

Take takes the resource, returns true on success, false for otherwise

func (*OnceGuard) Taken

func (og *OnceGuard) Taken() bool

Taken checks if the resource is taken

type Pool

type Pool struct {
	// contains filtered or unexported fields
}

A Pool is used to pool resources The difference between sync.Pool is that:

  1. the limit of the resources
  2. max age of the resources can be set
  3. the method to destroy resources can be customized

func NewPool

func NewPool(n int, create func() any, destroy func(any), opts ...PoolOption) *Pool

NewPool returns a Pool

func (*Pool) Get

func (p *Pool) Get() any

Get gets a resource

func (*Pool) Put

func (p *Pool) Put(x any)

Put puts a resource back

type PoolOption

type PoolOption func(*Pool)

PoolOption defines the method to customize a Pool

func WithMaxAge

func WithMaxAge(duration time.Duration) PoolOption

WithMaxAge returns a function to customize a Pool with given max age

type RefResource

type RefResource struct {
	// contains filtered or unexported fields
}

A RefResource is used to reference counting a resource

func NewRefResource

func NewRefResource(clean func()) *RefResource

NewRefResource returns a RefResource

func (*RefResource) Clean

func (r *RefResource) Clean()

Clean cleans a resource with reference count decremented

func (*RefResource) Use

func (r *RefResource) Use() error

Use uses the resource with reference count incremented

type ResourceManager

type ResourceManager struct {
	// contains filtered or unexported fields
}

A ResourceManager is a manager that used to manage resources

func NewResourceManager

func NewResourceManager() *ResourceManager

NewResourceManager returns a ResourceManager

func (*ResourceManager) Close

func (manager *ResourceManager) Close() error

Close closes the manager Don't use the ResourceManager after Close() called

func (*ResourceManager) GetResource

func (manager *ResourceManager) GetResource(key string, create func() (io.Closer, error)) (
	io.Closer, error)

GetResource returns the resource associated with given key

func (*ResourceManager) Inject

func (manager *ResourceManager) Inject(key string, resource io.Closer)

Inject injects the resource associated with given key

type SingleFlight

type SingleFlight interface {
	Do(key string, fn func() (any, error)) (any, error)
	DoEx(key string, fn func() (any, error)) (any, bool, error)
}

SingleFlight lets the concurrent calls with the same key to share the call result For example, A called F, before it's done, B called F. Then B would not execute F, and shared the result returned by F which called by A The calls with the same key are dependent, concurrent calls share the returned values A ------->calls F with key<------------------->returns val B --------------------->calls F with key------>returns val

func NewSingleFlight

func NewSingleFlight() SingleFlight

NewSingleFlight returns a SingleFlight

type SpinLock

type SpinLock struct {
	// contains filtered or unexported fields
}

A SpinLock is used as a lock a fast execution

func (*SpinLock) Lock

func (sl *SpinLock) Lock()

Lock locks the SpinLock

func (*SpinLock) TryLock

func (sl *SpinLock) TryLock() bool

TryLock tries to lock the SpinLock

func (*SpinLock) Unlock

func (sl *SpinLock) Unlock()

Unlock unlocks the SpinLock

type TimeoutLimit

type TimeoutLimit struct {
	// contains filtered or unexported fields
}

A TimeoutLimit is used to borrow with timeouts

func NewTimeoutLimit

func NewTimeoutLimit(n int) TimeoutLimit

NewTimeoutLimit returns a TimeoutLimit

func (TimeoutLimit) Borrow

func (l TimeoutLimit) Borrow(timeout time.Duration) error

Borrow borrows with given timeout

func (TimeoutLimit) Return

func (l TimeoutLimit) Return() error

Return returns a borrow

func (TimeoutLimit) TryBorrow

func (l TimeoutLimit) TryBorrow() bool

TryBorrow tries a borrow

Jump to

Keyboard shortcuts

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