Sha256: d47a80bdaca9b9516117d0201500daccaec852f1b948fcb266efd7264fbdb162

Contents?: true

Size: 1.18 KB

Versions: 104

Compression:

Stored size: 1.18 KB

Contents

module ThreadSafe
  module Util
    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
  end
end

Version data entries

104 entries across 98 versions & 30 rubygems

Version Path
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/thread_safe-0.3.6/lib/thread_safe/util/atomic_reference.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/thread_safe-0.3.6/lib/thread_safe/util/atomic_reference.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/thread_safe-0.3.6/lib/thread_safe/util/atomic_reference.rb
mumukit-content-type-1.12.1 vendor/bundle/ruby/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/util/atomic_reference.rb
mumukit-content-type-1.12.0 vendor/bundle/ruby/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.2.1.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.2.0 vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.2.0.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.26.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.25.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.24.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.23.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.22.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.21.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
mumukit-content-type-1.11.1 vendor/bundle/ruby/2.6.0/gems/thread_safe-0.3.6/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.20.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.19.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.18.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.17.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb
logstash-output-scalyr-0.1.16.beta vendor/bundle/jruby/2.5.0/gems/thread_safe-0.3.6-java/lib/thread_safe/util/atomic_reference.rb