module Concurrent::AtomicDirectUpdate

Define update methods that use direct paths

@!visibility private @!macro internal_implementation_note

Public Instance Methods

try_update() { |old_value| ... } click to toggle source
# File lib/concurrent-ruby/concurrent/atomic_reference/atomic_direct_update.rb, line 15
def try_update
  old_value = get
  new_value = yield old_value

  return unless compare_and_set old_value, new_value

  new_value
end
try_update!() { |old_value| ... } click to toggle source
# File lib/concurrent-ruby/concurrent/atomic_reference/atomic_direct_update.rb, line 24
def try_update!
  old_value = get
  new_value = yield old_value
  unless compare_and_set(old_value, new_value)
    if $VERBOSE
      raise ConcurrentUpdateError, "Update failed"
    else
      raise ConcurrentUpdateError, "Update failed", ConcurrentUpdateError::CONC_UP_ERR_BACKTRACE
    end
  end
  new_value
end
update() { |old_value| ... } click to toggle source
# File lib/concurrent-ruby/concurrent/atomic_reference/atomic_direct_update.rb, line 10
def update
  true until compare_and_set(old_value = get, new_value = yield(old_value))
  new_value
end