class Concurrent::MutexAtomicFixnum
@!macro internal_implementation_note
@!visibility private
@!macro atomic_fixnum
def compare_and_set(expect, update)
def compare_and_set(expect, update) synchronize do if @value == expect.to_i @value = update.to_i true else false end end end
def decrement(delta = 1)
def decrement(delta = 1) synchronize { ns_set(@value - delta.to_i) } end
def increment(delta = 1)
def increment(delta = 1) synchronize { ns_set(@value + delta.to_i) } end
def initialize(initial = 0)
def initialize(initial = 0) super() @Lock = ::Mutex.new ns_set(initial) end
def ns_set(value)
def ns_set(value) Utility::NativeInteger.ensure_integer_and_bounds value @value = value end
def synchronize
def synchronize if @Lock.owned? yield else @Lock.synchronize { yield } end end
def update
def update synchronize do @value = yield @value end end
def value
def value synchronize { @value } end
def value=(value)
def value=(value) synchronize { ns_set(value) } end