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 collapse

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
    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