Documentation ¶
Overview ¶
Package sync implements primitives for synchronization between processes.
Index ¶
- Constants
- Variables
- func DestroyCond(name string) error
- func DestroyFutexMutex(name string) error
- func DestroyMutex(name string) error
- func DestroySemaMutex(name string) error
- func DestroySpinMutex(name string) error
- func FutexWait(addr unsafe.Pointer, value uint32, timeout time.Duration, flags int32) error
- func FutexWake(addr unsafe.Pointer, count uint32, flags int32) (int, error)
- type Cond
- type FutexMutex
- type IPCLocker
- type InplaceMutex
- type SemaMutex
- type Semaphore
- type SpinMutex
- type TimedIPCLocker
Constants ¶
const ( // FUTEX_PRIVATE_FLAG is used to optimize futex usage for process-private futexes. FUTEX_PRIVATE_FLAG = 128 // FUTEX_CLOCK_REALTIME is used to tell the kernel, that is must treat timeouts for // FUTEX_WAIT_BITSET, FUTEX_WAIT_REQUEUE_PI, and FUTEX_WAIT as an absolute time based on CLOCK_REALTIME FUTEX_CLOCK_REALTIME = 256 )
Variables ¶
var ( // MaxCondWaiters is the maximum length of the waiting queue for this type of a cond. // This limit is actual for waitlist-based condvars, currently on windows and darwin. // If this limit is exceeded, Wait/WaitTimeout will panic with ErrTooManyWaiters. MaxCondWaiters = 128 // ErrTooManyWaiters is an error, that indicates, that the waiting queue is full. ErrTooManyWaiters = errors.New("waiters limit has been reached") )
Functions ¶
func DestroyCond ¶ added in v0.3.0
DestroyCond permanently removes condvar with the given name.
func DestroyFutexMutex ¶
DestroyFutexMutex permanently removes mutex with the given name.
func DestroyMutex ¶
DestroyMutex permanently removes mutex with the given name.
func DestroySemaMutex ¶
DestroySemaMutex permanently removes mutex with the given name.
func DestroySpinMutex ¶
DestroySpinMutex removes a mutex object with the given name
Types ¶
type Cond ¶ added in v0.3.0
type Cond struct {
// contains filtered or unexported fields
}
Cond is a named interprocess condition variable.
func NewCond ¶ added in v0.3.0
NewCond returns new interprocess condvar.
name - unique condvar name. flag - a combination of open flags from 'os' package. perm - object's permission bits. l - a locker, associated with the shared resource.
type FutexMutex ¶
type FutexMutex struct {
// contains filtered or unexported fields
}
FutexMutex is a mutex based on linux futex object.
func NewFutexMutex ¶
NewFutexMutex creates a new futex-based mutex. This implementation is based on a paper 'Futexes Are Tricky' by Ulrich Drepper, this document can be found in 'docs' folder.
name - object name. flag - flag is a combination of open flags from 'os' package. perm - object's permission bits.
func (*FutexMutex) Close ¶
func (f *FutexMutex) Close() error
Close indicates, that the object is no longer in use, and that the underlying resources can be freed.
func (*FutexMutex) LockTimeout ¶
func (f *FutexMutex) LockTimeout(timeout time.Duration) bool
LockTimeout tries to lock the locker, waiting for not more, than timeout.
func (*FutexMutex) Unlock ¶
func (f *FutexMutex) Unlock()
Unlock releases the mutex. It panics on an error.
type IPCLocker ¶
IPCLocker is a minimal interface, which must be satisfied by any synchronization primitive on any platform.
type InplaceMutex ¶ added in v0.3.0
type InplaceMutex uint32
InplaceMutex is a linux futex, which can be placed into a shared memory region.
func NewInplaceMutex ¶ added in v0.3.0
func NewInplaceMutex(ptr unsafe.Pointer) *InplaceMutex
NewInplaceMutex creates a futex object on the given memory location.
ptr - memory location for the futex.
func (*InplaceMutex) Init ¶ added in v0.3.0
func (f *InplaceMutex) Init()
Init writes initial value into futex's memory location.
func (*InplaceMutex) LockTimeout ¶ added in v0.3.0
func (f *InplaceMutex) LockTimeout(timeout time.Duration) bool
LockTimeout tries to lock the locker, waiting for not more, than timeout.
func (*InplaceMutex) TryLock ¶ added in v0.3.0
func (f *InplaceMutex) TryLock() bool
TryLock tries to lock the locker. Return true, if it was locked.
func (*InplaceMutex) Unlock ¶ added in v0.3.0
func (f *InplaceMutex) Unlock()
Unlock releases the mutex. It panics on an error.
type SemaMutex ¶
type SemaMutex struct {
// contains filtered or unexported fields
}
SemaMutex is a semaphore-based mutex for unix.
func NewSemaMutex ¶
NewSemaMutex creates a new mutex.
func (*SemaMutex) LockTimeout ¶
LockTimeout tries to lock the locker, waiting for not more, than timeout.
type Semaphore ¶
type Semaphore struct {
// contains filtered or unexported fields
}
Semaphore is a sysV semaphore.
func NewSemaphore ¶
NewSemaphore creates a new sysV semaphore with the given name. It generates a key from the name, and then calls NewSemaphoreKey.
func NewSemaphoreKey ¶
NewSemaphoreKey creates a new sysV semaphore for the given key.
key - object key. each semaphore object is identifyed by a unique key. flag - flag is a combination of open flags from 'os' package. perm - object's permission bits. initial - this value will be added to the semaphore's value, if it was created.
func (*Semaphore) Add ¶
Add adds the given value to the semaphore's value. It locks, if the operation cannot be done immediately.
func (*Semaphore) AddTimeout ¶
AddTimeout add the given value to the semaphore's value. If the operation locks, it waits for not more, than timeout.
type SpinMutex ¶
type SpinMutex struct {
// contains filtered or unexported fields
}
SpinMutex is a synchronization object which performs busy wait loop.
func NewSpinMutex ¶
NewSpinMutex creates a new spin mutex.
name - object name. flag - flag is a combination of open flags from 'os' package. perm - object's permission bits.
func (*SpinMutex) Close ¶
Close indicates, that the object is no longer in use, and that the underlying resources can be freed.
func (*SpinMutex) Lock ¶
func (spin *SpinMutex) Lock()
Lock locks the mutex waiting in a busy loop if needed.
func (*SpinMutex) LockTimeout ¶ added in v0.3.0
LockTimeout locks the mutex waiting in a busy loop for not longer, than timeout.