@atomic
Import this module with import @atomic.
Lock-free atomic operations backed by hand-written assembly (ARM64 and x86_64). Compiler-only feature.
64-bit Atomics
Section titled “64-bit Atomics”All pointer arguments must be ^i64 (pointer to i64).
| Function | Signature | Description |
|---|---|---|
load |
(ptr ^i64) -> i64 |
Atomically load a value |
store |
(ptr ^i64, val i64) |
Atomically store a value |
add |
(ptr ^i64, val i64) -> i64 |
Atomic add; returns previous value |
sub |
(ptr ^i64, val i64) -> i64 |
Atomic subtract; returns previous value |
exchange |
(ptr ^i64, val i64) -> i64 |
Atomic swap; returns previous value |
cas |
(ptr ^i64, expected i64, desired i64) -> bool |
Compare-and-swap; returns true on success |
and |
(ptr ^i64, val i64) -> i64 |
Atomic bitwise AND; returns previous value |
or |
(ptr ^i64, val i64) -> i64 |
Atomic bitwise OR; returns previous value |
xor |
(ptr ^i64, val i64) -> i64 |
Atomic bitwise XOR; returns previous value |
Spinlock
Section titled “Spinlock”| Function | Signature | Description |
|---|---|---|
spinlock |
() -> SpinLock |
Create a new spinlock |
spin_lock |
(lk SpinLock) |
Acquire a spinlock (spins until acquired) |
spin_trylock |
(lk SpinLock) -> bool |
Try to acquire; returns true if acquired |
spin_unlock |
(lk SpinLock) |
Release a spinlock |
spinlock_destroy |
(lk SpinLock) |
Destroy a spinlock and free its resources |
Memory Barrier
Section titled “Memory Barrier”| Function | Signature | Description |
|---|---|---|
fence |
() |
Full memory barrier (sequential consistency) |