Module: ThreadSafe::Util
- Defined in:
- lib/thread_safe/util.rb,
lib/thread_safe/util/adder.rb,
lib/thread_safe/util/volatile.rb,
lib/thread_safe/util/striped64.rb,
lib/thread_safe/util/cheap_lockable.rb,
lib/thread_safe/util/volatile_tuple.rb,
lib/thread_safe/util/atomic_reference.rb,
lib/thread_safe/util/xor_shift_random.rb,
lib/thread_safe/util/power_of_two_tuple.rb
Defined Under Namespace
Modules: CheapLockable, Volatile, XorShiftRandom Classes: Adder, PowerOfTwoTuple, Striped64, VolatileTuple
Constant Summary
- FIXNUM_BIT_SIZE =
(0.size * 8) - 2
- MAX_INT =
(2 ** FIXNUM_BIT_SIZE) - 1
- CPU_COUNT =
is there a way to determine this?
16
- AtomicReference =
if defined?(Rubinius::AtomicReference) # An overhead-less atomic reference. Rubinius::AtomicReference else begin require 'atomic' defined?(Atomic::InternalReference) ? Atomic::InternalReference : Atomic rescue LoadError, NameError require 'thread' # get Mutex on 1.8 class FullLockingAtomicReference def initialize(value = nil) @___mutex = Mutex.new @___value = value end def get @___mutex.synchronize { @___value } end alias_method :value, :get def set(new_value) @___mutex.synchronize { @___value = new_value } end alias_method :value=, :set def compare_and_set(old_value, new_value) return false unless @___mutex.try_lock begin return false unless @___value.equal? old_value @___value = new_value ensure @___mutex.unlock end true end end FullLockingAtomicReference end end