Class: Atomic

### Home Classes Methods

### In Files

- lib/atomic/concurrent_update_error.rb
- lib/atomic/delegated_update.rb
- lib/atomic/direct_update.rb
- lib/atomic/fallback.rb
- lib/atomic/numeric_cas_wrapper.rb
- lib/atomic/rbx.rb

### Parent

Rubinius::AtomicReference

### Namespace

- CLASS Atomic::ConcurrentUpdateError

### Methods

- #_compare_and_set
- #compare_and_set
- #compare_and_swap
- #try_update
- #update

### Class/Module Index

Quicksearch

- Atomic
- Atomic::ConcurrentUpdateError

No matching classes.

# Atomic

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.

Define update methods that delegate to @ref field

Define update methods that use direct paths

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.

extend Rubinius's version adding aliases and numeric logic

### Public Instance Methods

_compare_and_set(expected, new) click to toggle source
Alias for: compare_and_set
compare_and_set(expected, new) click to toggle source

    # File lib/atomic/numeric_cas_wrapper.rb, line 15
    def compare_and_set(expected, new)
      if expected.kind_of? Numeric
        while true
          old = get

          return false unless old.kind_of? Numeric

          return false unless old == expected

          result = _compare_and_set(old, new)
          return result if result
        end
      else
        _compare_and_set(expected, new)
      end
    end

Also aliased as: _compare_and_set, compare_and_swap
compare_and_swap(expected, new) click to toggle source
Alias for: compare_and_set
try_update() click to toggle source

    # File lib/atomic/delegated_update.rb, line 25
    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

update() click to toggle source

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.

    # File lib/atomic/delegated_update.rb, line 20
    def update
      true until @ref.compare_and_set(old_value = @ref.get, new_value = yield(old_value))
      new_value
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.