Std.AtomicRef
Process-safe mutable references backed by ETS with a lock server.
Types
AtomicMutRef
opaque type AtomicMutRef aOpaque handle to an atomic mutable reference. Backed by an ETS ref with a lock server process that serializes access. Safe for use across concurrent actors.
LockError
type LockError =
| LockTimeout
deriving (Show)Error type for timed lock acquisition.
Effects
AtomicRef
effect AtomicRef {
fun atomic_new : a -> AtomicMutRef a
fun atomic_lock : AtomicMutRef a -> a
fun atomic_try_lock : AtomicMutRef a -> Int -> Result a LockError
fun atomic_unlock : AtomicMutRef a -> a -> Unit
}Atomic mutable reference effect. Provides lock-based access to shared mutable state that is safe across concurrent processes.
Handlers
atomic_ref
handler atomic_ref for AtomicRef needs {Process, Monitor, Ref}Lock-based handler for AtomicRef. Uses ets_ref for storage and a serializing process for mutual exclusion. The lock server monitors the lock holder — if the holder crashes, the lock releases automatically.
Functions
lock_server
fun lock_server : Unit -> Unit needs {Process, Actor LockMsg, Monitor}atomic_modify
fun atomic_modify : AtomicMutRef a -> a -> a -> a needs {AtomicRef}Read-modify-write under the lock. Acquires the lock, applies the function to the current value, writes the result, and releases.
atomic_get
fun atomic_get : AtomicMutRef a -> a needs {AtomicRef}Read the current value. Acquires and immediately releases the lock.
atomic_set
fun atomic_set : AtomicMutRef a -> a -> Unit needs {AtomicRef}Overwrite the value. Acquires the lock, writes, and releases.