Sha256: 07df172545092a19fe2468f0476876da3caa0c1141f4c70da66f9ae30187eee6

Contents?: true

Size: 1.28 KB

Versions: 19

Compression:

Stored size: 1.28 KB

Contents

require 'thread'
require 'concurrent/atomic_reference/direct_update'
require 'concurrent/atomic_reference/numeric_cas_wrapper'

module Concurrent

  # @!macro atomic_reference
  #
  # @!visibility private
  # @!macro internal_implementation_note
  class MutexAtomicReference
    include Concurrent::AtomicDirectUpdate
    include Concurrent::AtomicNumericCompareAndSetWrapper

    # @!macro atomic_reference_method_initialize
    def initialize(value = nil)
      @mutex = Mutex.new
      @value = value
    end

    # @!macro atomic_reference_method_get
    def get
      @mutex.synchronize { @value }
    end
    alias_method :value, :get

    # @!macro atomic_reference_method_set
    def set(new_value)
      @mutex.synchronize { @value = new_value }
    end
    alias_method :value=, :set

    # @!macro atomic_reference_method_get_and_set
    def get_and_set(new_value)
      @mutex.synchronize do
        old_value = @value
        @value = new_value
        old_value
      end
    end
    alias_method :swap, :get_and_set

    # @!macro atomic_reference_method_compare_and_set
    def _compare_and_set(old_value, new_value)
      @mutex.synchronize do
        if @value.equal? old_value
          @value = new_value
          true
        else
          false
        end
      end
    end
  end
end

Version data entries

19 entries across 17 versions & 5 rubygems

Version Path
logstash-filter-zabbix-0.1.2 vendor/bundle/jruby/1.9/gems/concurrent-ruby-0.9.2-java/lib/concurrent/atomic_reference/mutex_atomic.rb
logstash-filter-zabbix-0.1.1 vendor/bundle/jruby/1.9/gems/concurrent-ruby-0.9.2-java/lib/concurrent/atomic_reference/mutex_atomic.rb
ivanvc-logstash-input-s3-3.1.1.4 vendor/local/gems/concurrent-ruby-0.9.2-java/lib/concurrent/atomic_reference/mutex_atomic.rb
ivanvc-logstash-input-s3-3.1.1.3 vendor/local/gems/concurrent-ruby-0.9.2-java/lib/concurrent/atomic_reference/mutex_atomic.rb
ivanvc-logstash-input-s3-3.1.1.2 vendor/local/gems/concurrent-ruby-0.9.2-java/lib/concurrent/atomic_reference/mutex_atomic.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/concurrent-ruby-0.9.2-java/lib/concurrent/atomic_reference/mutex_atomic.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/logstash-codec-json-2.0.3/vendor/gems/concurrent-ruby-0.9.1-java/lib/concurrent/atomic_reference/mutex_atomic.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/concurrent-ruby-0.9.1-java/lib/concurrent/atomic_reference/mutex_atomic.rb
logstash-codec-json-2.0.3 vendor/gems/concurrent-ruby-0.9.1-java/lib/concurrent/atomic_reference/mutex_atomic.rb
concurrent-ruby-0.9.2-java lib/concurrent/atomic_reference/mutex_atomic.rb
concurrent-ruby-0.9.2 lib/concurrent/atomic_reference/mutex_atomic.rb
logstash-input-beats-0.9.2 vendor/jruby/1.9/gems/concurrent-ruby-0.9.1-java/lib/concurrent/atomic_reference/mutex_atomic.rb
logstash-input-beats-0.9.1 vendor/jruby/1.9/gems/concurrent-ruby-0.9.1-java/lib/concurrent/atomic_reference/mutex_atomic.rb
concurrent-ruby-0.9.1 lib/concurrent/atomic_reference/mutex_atomic.rb
concurrent-ruby-0.9.1-java lib/concurrent/atomic_reference/mutex_atomic.rb
concurrent-ruby-0.9.0 lib/concurrent/atomic_reference/mutex_atomic.rb
concurrent-ruby-0.9.0-java lib/concurrent/atomic_reference/mutex_atomic.rb
concurrent-ruby-0.9.0.pre3-java lib/concurrent/atomic_reference/mutex_atomic.rb
concurrent-ruby-0.9.0.pre3 lib/concurrent/atomic_reference/mutex_atomic.rb