Sha256: 1e0f3c426f3bcb7ae9ae3e086e43e9270b9ae40f5971de95c3ada53b97155f18
Contents?: true
Size: 1 KB
Versions: 152
Compression:
Stored size: 1 KB
Contents
module ThreadSafe module Util # A fixed size array with volatile volatile getters/setters. # Usage: # arr = VolatileTuple.new(16) # arr.volatile_set(0, :foo) # arr.volatile_get(0) # => :foo # arr.cas(0, :foo, :bar) # => true # arr.volatile_get(0) # => :bar class VolatileTuple include Enumerable Tuple = defined?(Rubinius::Tuple) ? Rubinius::Tuple : Array def initialize(size) @tuple = tuple = Tuple.new(size) i = 0 while i < size tuple[i] = AtomicReference.new i += 1 end end def volatile_get(i) @tuple[i].get end def volatile_set(i, value) @tuple[i].set(value) end def compare_and_set(i, old_value, new_value) @tuple[i].compare_and_set(old_value, new_value) end alias_method :cas, :compare_and_set def size @tuple.size end def each @tuple.each {|ref| yield ref.get} end end end end
Version data entries
152 entries across 144 versions & 47 rubygems