123456789_123456789_123456789_123456789_123456789_

Class: Concurrent::ThreadSafe::Util::Striped64::Cell

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: Concurrent::AtomicReference
Defined in: lib/concurrent-ruby/concurrent/thread_safe/util/striped64.rb

Overview

Padded variant of AtomicLong supporting only raw accesses plus CAS. The value field is placed between pads, hoping that the JVM doesn’t reorder them.

Optimisation note: It would be possible to use a release-only form of CAS here, if it were provided.

Class Method Summary

AtomicReference - Inherited

Instance Method Summary

AtomicReference - Inherited

#compare_and_set

Atomically sets the value to the given updated value if the current value == the expected value.

#get

Gets the current value.

#get_and_set

Atomically sets to the given value and returns the old value.

#inspect
#set

Sets to the given value.

#to_s,
#try_update

Pass the current value to the given block, replacing it with the block’s result.

#try_update!

Pass the current value to the given block, replacing it with the block’s result.

#update

Pass the current value to the given block, replacing it with the block’s result.

Constructor Details

This class inherits a constructor from Concurrent::AtomicReference

Class Method Details

.padding (private)

[ GitHub ]

  
# File 'lib/concurrent-ruby/concurrent/thread_safe/util/striped64.rb', line 96

def self.padding
  # TODO: this only adds padding after the :value slot, need to find a way to add padding before the slot
  # TODO (pitr-ch 28-Jul-2018): the padding instance vars may not be created
  # hide from yardoc in a method
  attr_reader :padding_0, :padding_1, :padding_2, :padding_3, :padding_4, :padding_5, :padding_6, :padding_7, :padding_8, :padding_9, :padding_10, :padding_11
end

Instance Method Details

#cas(old_value, new_value)

[ GitHub ]

  
# File 'lib/concurrent-ruby/concurrent/thread_safe/util/striped64.rb', line 89

alias_method :cas, :compare_and_set

#cas_computed

[ GitHub ]

  
# File 'lib/concurrent-ruby/concurrent/thread_safe/util/striped64.rb', line 91

def cas_computed
  cas(current_value = value, yield(current_value))
end