Module: Garcon::AtomicNumericCompareAndSetWrapper

Included in:
AtomicMutex
Defined in:
lib/garcon/task/atomic.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



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/garcon/task/atomic.rb', line 64

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