lock

package
v0.15.7 Latest Latest
Warning

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

Go to latest
Published: Aug 31, 2023 License: Apache-2.0 Imports: 7 Imported by: 340

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Mutex

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

Mutex is equivalent to sync.Mutex but applies deadlock detection if the built tag "lockdebug" is set

func (*Mutex) UnlockIgnoreTime

func (i *Mutex) UnlockIgnoreTime()

type MutexDebug

type MutexDebug struct {
	deadlock.Mutex
}

MutexDebug is a MutexDebug with deadlock detection regardless of use of the build tag

type RWMutex

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

RWMutex is equivalent to sync.RWMutex but applies deadlock detection if the built tag "lockdebug" is set

func (*RWMutex) UnlockIgnoreTime

func (i *RWMutex) UnlockIgnoreTime()

type RWMutexDebug

type RWMutexDebug struct {
	deadlock.RWMutex
}

RWMutexDebug is a RWMutexDebug with deadlock detection regardless of use of the build tag

type SemaphoredMutex

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

SemaphoredMutex is a semaphored mutex that provides a RWLocker interface.

func NewSemaphoredMutex

func NewSemaphoredMutex() SemaphoredMutex

NewSemaphoredMutex returns a new SemaphoredMutex.

func (*SemaphoredMutex) Lock

func (i *SemaphoredMutex) Lock()

func (*SemaphoredMutex) RLock

func (i *SemaphoredMutex) RLock()

func (*SemaphoredMutex) RUnlock

func (i *SemaphoredMutex) RUnlock()

func (*SemaphoredMutex) Unlock

func (i *SemaphoredMutex) Unlock()

func (*SemaphoredMutex) UnlockToRLock

func (i *SemaphoredMutex) UnlockToRLock()

UnlockToRLock releases the current lock for writing but it still keeps it for reading purposes.

type SortableMutex

type SortableMutex interface {
	sync.Locker
	Seq() uint64
	AcquireDuration() time.Duration // The amount of time it took to acquire the lock
}

SortableMutex provides a Mutex that can be globally sorted with other sortable mutexes. This allows deadlock-safe locking of a set of mutexes as it guarantees consistent lock ordering.

func NewSortableMutex

func NewSortableMutex() SortableMutex

type SortableMutexes

type SortableMutexes []SortableMutex

SortableMutexes is a set of mutexes that can be locked in a safe order. Once Lock() is called it must not be mutated!

func (SortableMutexes) Len

func (s SortableMutexes) Len() int

Len implements sort.Interface.

func (SortableMutexes) Less

func (s SortableMutexes) Less(i int, j int) bool

Less implements sort.Interface.

func (SortableMutexes) Lock

func (s SortableMutexes) Lock()

Lock sorts the mutexes, and then locks them in order. If any lock cannot be acquired, this will block while holding the locks with a lower sequence number.

func (SortableMutexes) Swap

func (s SortableMutexes) Swap(i int, j int)

Swap implements sort.Interface.

func (SortableMutexes) Unlock

func (s SortableMutexes) Unlock()

Unlock locks the sorted set of mutexes locked by prior call to Lock().

type StoppableWaitGroup

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

A StoppableWaitGroup waits for a collection of goroutines to finish.

func NewStoppableWaitGroup

func NewStoppableWaitGroup() *StoppableWaitGroup

NewStoppableWaitGroup returns a new StoppableWaitGroup. When the 'Stop' is executed, following 'Add()' calls won't have any effect.

func (*StoppableWaitGroup) Add

func (l *StoppableWaitGroup) Add()

Add adds the goroutine to the list of routines to that Wait() will have to wait before it returns. If the StoppableWaitGroup was stopped this will be a no-op.

func (*StoppableWaitGroup) Done

func (l *StoppableWaitGroup) Done()

Done will decrement the number of goroutines the Wait() will have to wait before it returns. This function is a no-op once all goroutines that have called 'Add()' have also called 'Done()' and the StoppableWaitGroup was stopped.

func (*StoppableWaitGroup) Stop

func (l *StoppableWaitGroup) Stop()

Stop makes following 'Add()' to be considered a no-op. If all goroutines that have called Add also called Done, 'Wait()' will be immediately unblocked.

func (*StoppableWaitGroup) Wait

func (l *StoppableWaitGroup) Wait()

Wait will return once all goroutines that have called Add also called Done and StoppableWaitGroup was stopped. Internally, Wait() returns once the internal counter becomes negative.

func (*StoppableWaitGroup) WaitChannel

func (l *StoppableWaitGroup) WaitChannel() <-chan struct{}

WaitChannel will return a channel that will be closed once all goroutines that have called Add also called Done and StoppableWaitGroup was stopped.

Directories

Path Synopsis
SPDX-License-Identifier: Apache-2.0 Copyright Authors of Cilium
SPDX-License-Identifier: Apache-2.0 Copyright Authors of Cilium

Jump to

Keyboard shortcuts

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