class Concurrent::MutexAtomicFixnum

@!macro atomic_fixnum @!visibility private @!macro internal_implementation_note

Public Class Methods

new(initial = 0) click to toggle source

@!macro atomic_fixnum_method_initialize

Calls superclass method
# File lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb, line 13
def initialize(initial = 0)
  super()
  @Lock = ::Mutex.new
  ns_set(initial)
end

Public Instance Methods

compare_and_set(expect, update) click to toggle source

@!macro atomic_fixnum_method_compare_and_set

# File lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb, line 44
def compare_and_set(expect, update)
  synchronize do
    if @value == expect.to_i
      @value = update.to_i
      true
    else
      false
    end
  end
end
decrement(delta = 1) click to toggle source

@!macro atomic_fixnum_method_decrement

# File lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb, line 37
def decrement(delta = 1)
  synchronize { ns_set(@value - delta.to_i) }
end
Also aliased as: down
down(delta = 1)
Alias for: decrement
increment(delta = 1) click to toggle source

@!macro atomic_fixnum_method_increment

# File lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb, line 30
def increment(delta = 1)
  synchronize { ns_set(@value + delta.to_i) }
end
Also aliased as: up
up(delta = 1)
Alias for: increment
update() { |value| ... } click to toggle source

@!macro atomic_fixnum_method_update

# File lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb, line 56
def update
  synchronize do
    @value = yield @value
  end
end
value() click to toggle source

@!macro atomic_fixnum_method_value_get

# File lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb, line 20
def value
  synchronize { @value }
end
value=(value) click to toggle source

@!macro atomic_fixnum_method_value_set

# File lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb, line 25
def value=(value)
  synchronize { ns_set(value) }
end

Protected Instance Methods

synchronize() { || ... } click to toggle source

@!visibility private

# File lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb, line 65
def synchronize
  if @Lock.owned?
    yield
  else
    @Lock.synchronize { yield }
  end
end

Private Instance Methods

ns_set(value) click to toggle source

@!visibility private

# File lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb, line 76
def ns_set(value)
  Utility::NativeInteger.ensure_integer_and_bounds value
  @value = value
end