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