Sha256: a3a83826e249db457c53dd4be3e04b1ce6552b616827fd224cdd56a2cb725b54
Contents?: true
Size: 1.25 KB
Versions: 24
Compression:
Stored size: 1.25 KB
Contents
# Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. require 'atomic/concurrent_update_error' # Define update methods that delegate to @ref field class Atomic # Pass the current value to the given block, replacing it # with the block's result. May retry if the value changes # during the block's execution. def update true until @ref.compare_and_set(old_value = @ref.get, new_value = yield(old_value)) new_value end def try_update old_value = @ref.get new_value = yield old_value unless @ref.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 end
Version data entries
24 entries across 24 versions & 2 rubygems