Module: Concurrent::AtomicNumericCompareAndSetWrapper

Included in:
CAtomic, MutexAtomic, RbxAtomic
Defined in:
lib/concurrent/atomic_reference/numeric_cas_wrapper.rb

Overview

Special “compare and set” handling of numeric values.

Instance Method Summary collapse

Instance Method Details

#compare_and_set(old_value, new_value) ⇒ Boolean Also known as: compare_and_swap

Atomically sets the value to the given updated value if the current value == the expected value.

that the actual value was not equal to the expected value.

Parameters:

  • old_value (Object)

    the expected value

  • new_value (Object)

    the new value

Returns:

  • (Boolean)

    ‘true` if successful. A `false` return indicates



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/concurrent/atomic_reference/numeric_cas_wrapper.rb', line 7

def compare_and_set(old_value, new_value)
  if old_value.kind_of? Numeric
    while true
      old = get

      return false unless old.kind_of? Numeric

      return false unless old == old_value

      result = _compare_and_set(old, new_value)
      return result if result
    end
  else
    _compare_and_set(old_value, new_value)
  end
end