syncutil

package
v0.3.37 Latest Latest
Warning

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

Go to latest
Published: Jun 2, 2022 License: MIT Imports: 10 Imported by: 1

Documentation

Overview

Package syncutil Package buffer provides an implementation of an unbounded buffer.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewGroup

func NewGroup(c ...uint16) *group

NewGroup 创建一个group对象, 可以带上默认的Context

func Parallel

func Parallel(fns ...func(ctx context.Context))

Types

type Event

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

Event represents a one-time event that may occur in the future.

func New

func New() *Event

New returns a new, ready-to-use Event.

func (*Event) Done

func (e *Event) Done() <-chan struct{}

Done returns a channel that will be closed when Fire is called.

func (*Event) Fire

func (e *Event) Fire() bool

Fire causes e to complete. It is safe to call multiple times, and concurrently. It returns true iff this call to Fire caused the signaling channel returned by Done to close.

func (*Event) HasFired

func (e *Event) HasFired() bool

HasFired returns true if Fire has been called.

type Group

type Group = group

type OptimisticLock added in v0.3.29

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

OptimisticLock allows an optimistic reading Could be retried or switched to RLock in case of failure

func NewOptimisticLock added in v0.3.29

func NewOptimisticLock() *OptimisticLock

NewOptimisticLock returns a new OptimisticLock

func (*OptimisticLock) Lock added in v0.3.29

func (o *OptimisticLock) Lock()

Lock locks resource for write

func (*OptimisticLock) OptLock added in v0.3.29

func (o *OptimisticLock) OptLock() int64

OptLock returns the stamp to be checked on OptUnlock

func (*OptimisticLock) OptUnlock added in v0.3.29

func (o *OptimisticLock) OptUnlock(stamp int64) bool

OptUnlock returns the boolean result of the optimistic unlock Retry or switch to read lock in case of negative outcome

func (*OptimisticLock) RLock added in v0.3.29

func (o *OptimisticLock) RLock()

RLock locks resource for read

func (*OptimisticLock) RUnlock added in v0.3.29

func (o *OptimisticLock) RUnlock()

RUnlock unlocks resource after read

func (*OptimisticLock) Unlock added in v0.3.29

func (o *OptimisticLock) Unlock()

Unlock unlocks resource after write

type ReentrantLock added in v0.3.29

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

ReentrantLock allows goroutines to enter into lock on a resource more than once

func NewReentrantLock added in v0.3.29

func NewReentrantLock() *ReentrantLock

NewReentrantLock returns new ReentrantLock

func (*ReentrantLock) Lock added in v0.3.29

func (r *ReentrantLock) Lock()

Lock locks resource Panics on GoroutineID call error

func (*ReentrantLock) Unlock added in v0.3.29

func (r *ReentrantLock) Unlock()

Unlock unlocks resource Panics on trying to unlock the unlocked lock

type SpinLock

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

func (*SpinLock) Lock

func (sl *SpinLock) Lock()

func (*SpinLock) TryLock

func (sl *SpinLock) TryLock() bool

func (*SpinLock) Unlock

func (sl *SpinLock) Unlock()

type Unbounded

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

Unbounded is an implementation of an unbounded buffer which does not use extra goroutines. This is typically used for passing updates from one entity to another within gRPC.

All methods on this type are thread-safe and don't block on anything except the underlying mutex used for synchronization.

Unbounded supports values of any type to be stored in it by using a channel of `interface{}`. This means that a call to Put() incurs an extra memory allocation, and also that users need a type assertion while reading. For performance critical code paths, using Unbounded is strongly discouraged and defining a new type specific implementation of this buffer is preferred. See internal/transport/transport.go for an example of this.

func NewUnbounded

func NewUnbounded() *Unbounded

NewUnbounded returns a new instance of Unbounded.

func (*Unbounded) Get

func (b *Unbounded) Get() <-chan interface{}

Get returns a read channel on which values added to the buffer, via Put(), are sent on.

Upon reading a value from this channel, users are expected to call Load() to send the next buffered value onto the channel if there is any.

func (*Unbounded) Load

func (b *Unbounded) Load()

Load sends the earliest buffered data, if any, onto the read channel returned by Get(). Users are expected to call this every time they read a value from the read channel.

func (*Unbounded) Put

func (b *Unbounded) Put(t interface{})

Put adds t to the unbounded buffer.

type WaitGroup

type WaitGroup struct {
	Check      bool
	Concurrent uint16
	// contains filtered or unexported fields
}

func NewWaitGroup

func NewWaitGroup(check bool, c ...uint16) WaitGroup

func (*WaitGroup) Add

func (t *WaitGroup) Add(delta int)

func (*WaitGroup) Count

func (t *WaitGroup) Count() uint16

func (*WaitGroup) Dec

func (t *WaitGroup) Dec()

func (*WaitGroup) Done

func (t *WaitGroup) Done()

func (*WaitGroup) EnableCheck

func (t *WaitGroup) EnableCheck()

func (*WaitGroup) Inc

func (t *WaitGroup) Inc()

func (*WaitGroup) Wait

func (t *WaitGroup) Wait()

Jump to

Keyboard shortcuts

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