///|
/// Memory ordering for atomic operations.
///
/// Windows uses Interlocked operations and may strengthen every ordering to
/// SeqCst. Linux implements the requested ordering with compiler atomics.
pub(all) enum MemoryOrdering {
/// No inter-thread synchronization beyond atomicity.
Relaxed
/// Prevents later operations from moving before this operation.
Acquire
/// Prevents earlier operations from moving after this operation.
Release
/// Applies both Acquire and Release constraints.
AcqRel
/// Participates in one global sequentially consistent order.
SeqCst
} derive(Eq, Debug)
///|
fn MemoryOrdering::code(self : MemoryOrdering) -> Int {
match self {
Relaxed => 0
Acquire => 1
Release => 2
AcqRel => 3
SeqCst => 4
}
}
///|
pub struct CompareExchangeResult[T] {
observed : T
exchanged : Bool
} derive(Eq, Debug)