A value that may be updated atomically.
T is a reference type, or a union type containing only reference types or Nil, then only #compare_and_set, #swap, #set, #lazy_set, #get, and #lazy_get are available.T is a pointer type, then the above methods plus #max and #min are available.T is a non-union primitive integer type or enum type, then all operations are supported.Creates an Atomic with the given initial value.
Adds an explicit memory barrier with the specified memory order guarantee.
Performs atomic_value &+= value.
Performs atomic_value &= value.
Compares this atomic's value with cmp using explicit memory orderings:
Compares this atomic's value with cmp:
Atomically returns this atomic's value.
Non-atomically returns this atomic's value.
Non-atomically sets this atomic's value to value.
Performs atomic_value = {atomic_value, value}.max.
Performs atomic_value = {atomic_value, value}.min.
Performs atomic_value = ~(atomic_value & value).
Performs atomic_value |= value.
Atomically sets this atomic's value to value.
Performs atomic_value &-= value.
Atomically sets this atomic's value to value.
Performs atomic_value ^= value.
Struct
Struct
Value
Object
Object
Object
Creates an Atomic with the given initial value.
Adds an explicit memory barrier with the specified memory order guarantee.
Performs atomic_value &+= value. Returns the old value.
T cannot contain any pointer or reference types.
atomic = Atomic.new(1) atomic.add(2) # => 1 atomic.get # => 3
Performs atomic_value &= value. Returns the old value.
T cannot contain any pointer or reference types.
atomic = Atomic.new(5) atomic.and(3) # => 5 atomic.get # => 1
Compares this atomic's value with cmp using explicit memory orderings:
{old_value, true}
{old_value, false}
Reference types are compared by #same?, not #==.
atomic = Atomic.new(0_u32) value = atomic.get(:acquire) loop do value, success = atomic.compare_and_set(value, value &+ 1, :acquire_release, :acquire) break if success end
Compares this atomic's value with cmp:
{old_value, true}
{old_value, false}
Reference types are compared by #same?, not #==.
atomic = Atomic.new(1)
atomic.compare_and_set(2, 3) # => {1, false}
atomic.get # => 1
atomic.compare_and_set(1, 3) # => {1, true}
atomic.get # => 3 Atomically returns this atomic's value.
Non-atomically returns this atomic's value.
NOTE use with caution, this may break atomic guarantees.
Non-atomically sets this atomic's value to value. Returns the new value.
atomic = Atomic.new(5) atomic.lazy_set(10) # => 10 atomic.get # => 10
NOTE use with caution, this may break atomic guarantees.
Performs atomic_value = {atomic_value, value}.max. Returns the old value.
T cannot contain any reference types.
atomic = Atomic.new(5) atomic.max(3) # => 5 atomic.get # => 5 atomic.max(10) # => 5 atomic.get # => 10
Performs atomic_value = {atomic_value, value}.min. Returns the old value.
T cannot contain any reference types.
atomic = Atomic.new(5) atomic.min(10) # => 5 atomic.get # => 5 atomic.min(3) # => 5 atomic.get # => 3
Performs atomic_value = ~(atomic_value & value). Returns the old value.
T cannot contain any pointer or reference types.
atomic = Atomic.new(5) atomic.nand(3) # => 5 atomic.get # => -2
Performs atomic_value |= value. Returns the old value.
T cannot contain any pointer or reference types.
atomic = Atomic.new(5) atomic.or(2) # => 5 atomic.get # => 7
Atomically sets this atomic's value to value. Returns the new value.
atomic = Atomic.new(5) atomic.set(10) # => 10 atomic.get # => 10
Performs atomic_value &-= value. Returns the old value.
T cannot contain any pointer or reference types.
atomic = Atomic.new(9) atomic.sub(2) # => 9 atomic.get # => 7
Atomically sets this atomic's value to value. Returns the old value.
atomic = Atomic.new(5) atomic.swap(10) # => 5 atomic.get # => 10
Performs atomic_value ^= value. Returns the old value.
T cannot contain any pointer or reference types.
atomic = Atomic.new(5) atomic.xor(3) # => 5 atomic.get # => 6
© 2012–2026 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/1.19.0/Atomic.html