Module: Concurrent::AtomicNumericCompareAndSetWrapper

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) ⇒ Object Also known as: compare_and_swap



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