package atomic
Import Path
runtime/internal/atomic (on go.dev)
Dependency Relation
imports one package, and imported by one package
Involved Source Files
atomic_amd64.go
Package atomic provides atomic operations, independent of sync/atomic,
to the runtime.
On most platforms, the compiler is aware of the functions defined
in this package, and they're replaced with platform-specific intrinsics.
On other platforms, generic implementations are made available.
Unless otherwise noted, operations defined in this package are sequentially
consistent across threads with respect to the values they manipulate. More
specifically, operations that happen in a specific order on one thread,
will always be observed to happen in exactly that order by another thread.
stubs.go
types.go
types_64bit.go
unaligned.go
atomic_amd64.s
Package-Level Type Names (total 9, in which 8 are exported)
Float64 is an atomically accessed float64 value.
A Float64 must not be copied.
u Uint64
Load accesses and returns the value atomically.
Store updates the value atomically.
Int32 is an atomically accessed int32 value.
An Int32 must not be copied.
noCopy noCopy
value int32
Add adds delta to i atomically, returning
the new updated value.
This operation wraps around in the usual
two's-complement way.
CompareAndSwap atomically compares i's value with old,
and if they're equal, swaps i's value with new.
Returns true if the operation succeeded.
Load accesses and returns the value atomically.
Store updates the value atomically.
Swap replaces i's value with new, returning
i's value before the replacement.
Int64 is an atomically accessed int64 value.
An Int64 must not be copied.
noCopy noCopy
value int64
Add adds delta to i atomically, returning
the new updated value.
This operation wraps around in the usual
two's-complement way.
CompareAndSwap atomically compares i's value with old,
and if they're equal, swaps i's value with new.
Returns true if the operation succeeded.
Load accesses and returns the value atomically.
Store updates the value atomically.
Swap replaces i's value with new, returning
i's value before the replacement.
Uint32 is an atomically accessed uint32 value.
A Uint32 must not be copied.
noCopy noCopy
value uint32
Add adds delta to u atomically, returning
the new updated value.
This operation wraps around in the usual
two's-complement way.
And takes value and performs a bit-wise
"and" operation with the value of u, storing
the result into u.
The full process is performed atomically.
CompareAndSwap atomically compares u's value with old,
and if they're equal, swaps u's value with new.
Returns true if the operation succeeded.
CompareAndSwapRelease is a partially unsynchronized version
of Cas that relaxes ordering constraints. Other threads
may observe operations that occur after this operation to
precede it, but no operation that precedes it
on this thread can be observed to occur after it.
Returns true if the operation succeeded.
WARNING: Use sparingly and with great care.
Load accesses and returns the value atomically.
LoadAcquire is a partially unsynchronized version
of Load that relaxes ordering constraints. Other threads
may observe operations that precede this operation to
occur after it, but no operation that occurs after it
on this thread can be observed to occur before it.
WARNING: Use sparingly and with great care.
Or takes value and performs a bit-wise
"or" operation with the value of u, storing
the result into u.
The full process is performed atomically.
Store updates the value atomically.
StoreRelease is a partially unsynchronized version
of Store that relaxes ordering constraints. Other threads
may observe operations that occur after this operation to
precede it, but no operation that precedes it
on this thread can be observed to occur after it.
WARNING: Use sparingly and with great care.
Swap replaces u's value with new, returning
u's value before the replacement.
Uint64 is an atomically accessed uint64 value.
A Uint64 must not be copied.
noCopy noCopy
value uint64
Add adds delta to u atomically, returning
the new updated value.
This operation wraps around in the usual
two's-complement way.
CompareAndSwap atomically compares u's value with old,
and if they're equal, swaps u's value with new.
Returns true if the operation succeeded.
Load accesses and returns the value atomically.
LoadAcquire is a partially unsynchronized version
of Load that relaxes ordering constraints. Other threads
may observe operations that precede this operation to
occur after it, but no operation that occurs after it
on this thread can be observed to occur before it.
WARNING: Use sparingly and with great care.
Store updates the value atomically.
StoreRelease is a partially unsynchronized version
of Store that relaxes ordering constraints. Other threads
may observe operations that occur after this operation to
precede it, but no operation that precedes it
on this thread can be observed to occur after it.
WARNING: Use sparingly and with great care.
Swap replaces u's value with new, returning
u's value before the replacement.
Uint8 is an atomically accessed uint8 value.
A Uint8 must not be copied.
noCopy noCopy
value uint8
And takes value and performs a bit-wise
"and" operation with the value of u, storing
the result into u.
The full process is performed atomically.
Load accesses and returns the value atomically.
Or takes value and performs a bit-wise
"or" operation with the value of u, storing
the result into u.
The full process is performed atomically.
Store updates the value atomically.
Uintptr is an atomically accessed uintptr value.
A Uintptr must not be copied.
noCopy noCopy
value uintptr
Add adds delta to u atomically, returning
the new updated value.
This operation wraps around in the usual
two's-complement way.
CompareAndSwap atomically compares u's value with old,
and if they're equal, swaps u's value with new.
Returns true if the operation succeeded.
Load accesses and returns the value atomically.
LoadAcquire is a partially unsynchronized version
of Load that relaxes ordering constraints. Other threads
may observe operations that precede this operation to
occur after it, but no operation that occurs after it
on this thread can be observed to occur before it.
WARNING: Use sparingly and with great care.
Store updates the value atomically.
StoreRelease is a partially unsynchronized version
of Store that relaxes ordering constraints. Other threads
may observe operations that occur after this operation to
precede it, but no operation that precedes it
on this thread can be observed to occur after it.
WARNING: Use sparingly and with great care.
Swap replaces u's value with new, returning
u's value before the replacement.
UnsafePointer is an atomically accessed unsafe.Pointer value.
Note that because of the atomicity guarantees, stores to values
of this type never trigger a write barrier, and the relevant
methods are suffixed with "NoWB" to indicate that explicitly.
As a result, this type should be used carefully, and sparingly,
mostly with values that do not live in the Go heap anyway.
An UnsafePointer must not be copied.
noCopy noCopy
value unsafe.Pointer
CompareAndSwapNoWB atomically (with respect to other methods)
compares u's value with old, and if they're equal,
swaps u's value with new.
Returns true if the operation succeeded.
WARNING: As the name implies this operation does *not*
perform a write barrier on value, and so this operation may
hide pointers from the GC. Use with care and sparingly.
It is safe to use with values not found in the Go heap.
Load accesses and returns the value atomically.
StoreNoWB updates the value atomically.
WARNING: As the name implies this operation does *not*
perform a write barrier on value, and so this operation may
hide pointers from the GC. Use with care and sparingly.
It is safe to use with values not found in the Go heap.
Package-Level Functions (total 43, in which 42 are exported)
NO go:noescape annotation; see atomic_pointer.go.
func Casuintptr(ptr *uintptr, old, new uintptr) bool func LoadAcquintptr(ptr *uintptr) uintptr func Loaduintptr(ptr *uintptr) uintptr func Storeint32(ptr *int32, new int32) func Storeint64(ptr *int64, new int64)
StorepNoWB performs *ptr = val atomically and without a write
barrier.
NO go:noescape annotation; see atomic_pointer.go.
func StoreRel64(ptr *uint64, val uint64) func StoreReluintptr(ptr *uintptr, val uintptr) func Storeuintptr(ptr *uintptr, new uintptr) func Xadduintptr(ptr *uintptr, delta uintptr) uintptr func Xchguintptr(ptr *uintptr, new uintptr) uintptr
The pages are generated with Golds v0.4.9. (GOOS=linux GOARCH=amd64)